Rückwärts gehen, indem man im Datei-stream
Sagen, ich habe einen file-Zeiger wie dieses:
file_ptr = fopen(“test.txt”, “r+”);
und ich möchte das ändern jedes char
's ASCII-Wert als bewege ich mich durch den stream (ich Tue dies als eine Chiffre, also wenn es einen besseren oder effizienteren Weg, dies zu tun, lassen Sie es mich bitte wissen).
Ich bin versucht, einen while(!feof(file_ptr)) {}
Schleife mit fgetc()
und fputc
, aber die file_ptr
werden, zeigen auf den nächsten char, also ich möchte wissen, ob es etwas gibt, das ich tun kann Punkt rückwärts einen Punkt.
Im wesentlichen, ich möchte wissen, die Datei-stream-äquivalent für:
char* blah="blah blah";
char* index=blah;
index++;/*how to navigate a file stream in this way*/
fseek(file_ptr, -1, SEEK_CUR);
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja: können Sie die
fseek
- Funktion:Darüber hinaus nach Ihrem
fputc
bevor Ihrefgetc
werde Sie anrufen möchtenfseek
wieder:nur benachrichtigt das system, dass Sie Umschalten zwischen lese-und Schreibvorgänge, so dass es weiß, um richtig zu Spülen, alle Puffer und so weiter. (Sonst könnte man nicht eigentlich da, wo Sie denken.)
Durch die Art und Weise, damit dies ordnungsgemäß funktioniert, öffnen Sie die Datei im Binärmodus statt im Textmodus:
da sonst die in-C definition von "Charakter" möglicherweise nicht exakt mit der in-Datei-definition von "Charakter" (vor allem, wenn es um die Zeilenenden), und
fseek
vielleicht legen Sie in der Mitte von einer der letzteren.long
, aber wenn Sie schreiben-1
, der compiler implizit konvertieren, um einlong
sowieso (weil es wird an eine Funktion übergeben, die erklärte wie einlong
). Entweder man ist 100% in Ordnung.