17.3.1 Ecriture et lecture en accès binaire : fwrite, fread

Icône de l'outil pédagogique Ecriture et lecture en accès binaire : fwrite, fread

Les fonctions fread/fwrite attendent, outre le pointeur du fichier, le nombre d'éléments à lire/écrire, la taille en octet d'un élément et l'adresse du « buffer10 » (zone mémoire) où ranger/trouver les données à lire/écrire. Ce buffer est en général un tableau, mais il peut aussi être une variable simple ou structurée (voir Erreur ! Source du renvoi introuvable.), surtout en accès non séquentiel avec positionnement préalable par fseek.

Très important : fread et fwrite renvoient le nombre d'éléments effectivement lus ou écrits. Si la valeur renvoyée par fread diffère du nombre d'éléments à lire, c'est que la fin du fichier a été rencontrée lors de la lecture. On se sert donc de la valeur renvoyée par fread pour savoir si la fin du fichier est atteinte.

Les prototypes de fread et fwrite sont les suivants :

int fread( void* adr_buffer, int taille_element, int nb_elements, FILE* fic);

int fwrite( void* adr_buffer, int taille_element, int nb_elements, FILE* fic);

Voici un exemple d'écriture de données dans un fichier binaire (en l'occurence, un tableau de 5 entiers, écrit deux fois pour les besoins de l’exemple), et le programme de lecture correspondant :

Exemple 98 : Sauvegarde de données dans un fichier binaire

/* La relecture du fichier sera effectuée dans le programme de l'exemple suivant. */

Exemple 99 : Lecture (séquentielle) du fichier binaire précédent 

/* On suppose ici que le nombre de valeurs à lire est inconnu. Sinon, le programme de lecture est l’exact symétrique du programme d'écriture précédent, avec fread au lieu de fwrite et ouverture par fopen en "rb" au lieu de "wb". */

Ce programme affiche : 1234512345


10 buffer = "tampon" en français = zone mémoire "à tout faire".