Frage

Ich habe mit dem Lesen Binärdatei in C folgendes Problem.

Ich habe die ersten 8 Bytes einer Binärdatei lesen. Jetzt muss ich aus dem 9. Byte Lesen beginnen. Im Folgenden finden Sie den Code ein:

fseek(inputFile, 2*sizeof(int), SEEK_SET);

Allerdings, wenn ich den Inhalt des Arrays drucken, wo ich die abgerufenen Werte zu speichern, ist es mir nach wie vor zeigt das erste 8 Bytes das ist nicht das, was ich brauche.

Kann mir jemand bitte helfen Sie mir mit diesem aus?

War es hilfreich?

Lösung

fseek bewegt nur den Positionszeiger des Datei-Stream; sobald Sie den Positionszeiger verschoben haben, müssen Sie fread tatsächlich gelesenen Bytes aus der Datei nennen.

Wenn Sie jedoch bereits die ersten acht Bytes aus der Datei mit fread gelesen haben, ist der Positionszeiger links zeigt auf den neunten Byte (vorausgesetzt, keine Fehler passieren, und die Datei ist mindestens neun Bytes lang, natürlich). Wenn Sie fread nennen, geht es den Positionszeiger durch die Anzahl von Bytes, die gelesen werden. Sie müssen nicht fseek nennen es zu bewegen.

Andere Tipps

Unter der Annahme:

FILE* file = fopen(FILENAME, "rb");
char buf[8];

Sie können die ersten 8 Bytes gelesen und dann die nächsten 8 Bytes:

/* Read first 8 bytes */
fread(buf, 1, 8, file); 
/* Read next 8 bytes */
fread(buf, 1, 8, file);

oder überspringen Sie das erste 8 Bytes mit fseek und lesen Sie das nächste 8 Bytes (8 .. 15 einschließlich, wenn ersten Byte in der Datei als 0 gezählt wird):

/* Skip first 8 bytes */
fseek(file, 8, SEEK_SET);
/* Read next 8 bytes */
fread(buf, 1, 8, file);

Der Schlüssel dies zu verstehen ist, dass die C-Bibliotheksfunktionen halten die aktuelle Position in der Datei automatisch für Sie. fread bewegt es, wenn es den Lesevorgang durchführt, so dass die nächste fread rechts startet, nachdem der vorherige abgeschlossen ist. fseek gerade bewegt sie, ohne zu lesen.


P. S .: Mein Code hier liest Bytes wie Ihre Frage gestellt. (Größe 1 als zweites Argument zu fread mitgeliefert)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top