Lettura da file binario fino alla fine del file

È possibile leggere da un file binario senza sapere esattamente quanti dati ci sono scritti. Questo si realizza esattamente come nel caso dei file di testo: si continua a leggere fino al punto in cui si raggiunge la fine del file e si a questo punto, evidentemente, si smette di leggere.

Nel caso dei file binari, quando si tenta di leggere qualcosa, e il file è finito, la funzione fread ritorna 0 invece che 1. In effetti, la funzione può ritornare 0 anche in caso di errore hardware o di sistema operativo, ma per il momento questo non ci interessa.

Possiamo quindi leggere un file con un ciclo da cui si esce non appena il valore di ritorno di fread è zero. Il programma seguente leggi.c legge interi da file, e li stampa. Si esce dal ciclo di lettura/stampa appena si arriva alla fine del file. In sostanza è identico all'analogo programma di lettura da file di testo, soltanto che al posto della funzione di lettura da file di testo fscanf si usa la funzione di lettura da file binari fread.

/*
  Legge interi da un file binario,
fino alla fine del file.
*/

#include<stdlib.h>
#include<stdio.h>

int main() {
  FILE *fd;
  int x;
  int res;

			/* apre il file in lettura */
  fd=fopen("test.dat", "r");
  if( fd==NULL ) {
    perror("Errore in apertura del file");
    exit(1);
  }


			/* ciclo di lettura */
  while(1) {
    res=fread(&x, sizeof(int), 1, fd);
    if( res!=1 ) 
      break;

    printf("%d\n", x);
  }


			/* chiude il file */
  fclose(fd);

  return 0;
}