Lettura file binario in C
-
23-09-2019 - |
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?
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
)