negatives Offset in fseek?

hab ich auch schon versucht, das funktioniert nicht!

habe folgenden code:
Code:
fprintf(pfile,"%s",asctime (timeinfo));
fseek(pfile,-4,SEEK_CUR);fprintf(pfile,"test\n");

das String von asctime (timeinfo) ist 26 Zeichen lang. Das letzte Zeichen ist ein \n. Deshalb ist er immer in der nächsten Zeile.
Das möchte ich verhindern und deshalb wieder zurück bzw. nach ober springen und weitere Strings dahinter schreiben.

//edit:
eine andere möglichkeit wäre das letzte zeichen des Strings von asctime (timeinfo) zu löschen. Jedoch bekomme ich das nicht hin weil er ein Zeiger ist. :(
 
Zuletzt bearbeitet:
Warte mal.. .was glaubst du, soll die fseek Funktion machen?
Sie stellt den File-Zeiger zurück auf eine andere Position...
...aber dabei löscht sie nicht, was dahinter schon geschrieben wurde. Das musst du Überschreiben oder mit SetEndOfFile (ich weiss grad nur die WinApi-Fkt, nicht den C-Befehl..) abschneiden, wenn dus weghaben willst.
 
nein.

also der schreibt mir jetzt folgendes in die Datei:

Code:
Mon Mar 21 14:28:01 2005
test

ich bin davon ausgegangen das er in die nächste Zeile geht weil das letzte Zeichen der Datum-Zeichenkette ein \n ist.
deshalb möchte ich einfach nur die Schreibposition um 2 Zeichen zurücksetzten damit der String test hinter dem Datum steht.

//edit:
hier mal ein link zu asctime
 
Zuletzt bearbeitet:
Zeig mal deinen Code dazu..
..weil die MSDN deute ich zu dem Thema so, dass es möglich ist und auch mein Testcode funktioniert einwandfrei...

(hier der Testcode:)
Code:
#include<stdio.h>

int main(){
	FILE* pf = fopen("a.txt","w+");
	char txt[] = "halllo du musc\nmann";
	fwrite(txt,1,sizeof(txt)-1,pf);
	fseek(pf,-7,SEEK_CUR);
	fwrite("kel",1,3,pf);
	fclose(pf);
	return 0; }
 
es funktionert auch mit fwrite nicht.

hier der ode
Code:
void SchreibeDaten(char const *data)
{
	int const BUFLEN=80;
	FILE *pfile;
	char buf[BUFLEN];
	///// --- Zeit und Datum holen -----------
	time_t rawtime;
	struct tm * timeinfo;
          time ( &rawtime );
	timeinfo = localtime ( &rawtime );
	printf ( "Aktuelle Zeit: %s\n", asctime (timeinfo) );
	pfile=fopen(Dateiname,"a");
	if (!pfile) {printf("fopen error beim schreiben\n"); return;}
 
         fprintf(pfile,"%s",asctime (timeinfo));
	fseek(pfile,ftell(pfile)-2,SEEK_CUR);
         cout << "ftell: " << ftell(pfile) << endl;
	fwrite("test\n",1,5,pfile);
	fclose(pfile);
}
 
Code:
	fseek(pfile,ftell(pfile)-2,SEEK_CUR);

...das ist falsch... überdenk es nochmal.. mit dem 2. Parameter gibst du denn Offset von der Position aus an, die im 3. Parameter spezifiziert wird...
 
Wie meinst du?
Braucht man Lese-Rechte für fseek?
Oder meintest du, weil sie im Text-Mode geöffnet war und daher ein \n als \r\n ausgegeben wurde?
Also das, was ich bemängelt hab, war auf jeden Fall auch ein Fehler...
 

Neue Beiträge

Zurück