Domanda

Sto avendo seguente problema con la lettura di file binario in C.

Ho letto i primi 8 byte di un file binario. Ora ho bisogno di iniziare la lettura dal 9 di byte. Di seguito è riportato il codice:

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

Tuttavia, quando stampo il contenuto della matrice in cui ho memorizzare i valori recuperati, ancora mi mostra i primi 8 byte che non è quello che mi serve.

qualcuno mi può aiutare si prega di uscire con questo?

È stato utile?

Soluzione

fseek appena si sposta il puntatore posizione del flusso di file; una volta che hai spostato il puntatore di posizione, è necessario chiamare fread di byte effettivamente letti dal file.

Tuttavia, se avete già letto i primi otto byte dal file utilizzando fread, il puntatore di posizione è di puntamento di sinistra alla nona di byte (supponendo che non gli errori accadono e il file è di almeno nove byte lunga, naturalmente). Quando si chiama fread, avanza il puntatore di posizione per il numero di byte che vengono letti. Non è necessario chiamare fseek per spostarlo.

Altri suggerimenti

Supponendo che:

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

E 'possibile leggere i primi 8 byte e poi i successivi 8 byte:

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

o saltare i primi 8 byte con fseek e leggere i successivi 8 byte (8 .. 15 compreso, se il conteggio primo byte nel file come 0):

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

La chiave per capire questo è che le funzioni di libreria C mantengono il posizione attuale nel file in modo automatico. fread muove quando esegue l'operazione di lettura, quindi la prossima fread inizia subito dopo il precedente è terminata. fseek appena si muove senza la lettura.


P.S .: Il mio codice qui si legge bytes come chiesto alla tua domanda. (Taglia 1 fornito come secondo argomento a fread)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top