Maîtrise d'informatique - Module 11
|
La lecture et l'écriture dans des fichiers, en langage C, peuvent être effectuées soit à l'aide des fonctions fscanf et fprintf, soit à l'aide des fonctions fread et fwrite. Il est important de bien connaître la différence essentielle entre ces deux paires de fonctions :
Pour manipuler un fichier en langage C, il faut avant tout le déclarer. Pour cela, on utilise la déclaration :
La fonction fopen permet d'ouvrir un fichier en lecture ou en écriture selon le mode spécifié. Sa syntaxe d'appel est :
où nom_de_fichier est le nom du fichier tel qu'il a été enregistré, ou tel qu'il doit être enregistré, précédé éventuellement du chemin d'accès, et où mode indique le mode d'accès : r pour la lecture ("read"), w pour l'écriture ("write").
L'ouverture en lecture d'un fichier inexistant retourne la valeur NULL dans la variable [id_fichier]. L'ouverture en écriture d'un fichier inexistant provoque la création de celui-ci.
Lorsqu'un fichier a été ouvert dans un programme, il est nécessaire de le fermer avant la fin de l'exécution de celui-ci. On utilise pour cela la fonction fclose. L'appel de cette fonction est du type :
fclose(fichier);
La fonction feof, d'en-tête :
int feof(FILE *fichier);
renvoie une valeur non nulle si la fin du fichier est atteinte.
Pour effectuer la lecture de données dans un fichier, il est possible d'utiliser la fonction fscanf, dont la syntaxe d'appel est :
fscanf([id_fichier],"[formats]",[adresse_des_paramètres]);
Cette fonction se comporte de la même manière que scanf en opérant la lecture non plus sur le "buffer d'entrée", mais dans un fichier.
Pour lire un entier dans le fichier home/mod18g0/tests/test.comp, on appellera fscanf de la manière suivante :
fscanf(fichier,"%d",&a);
Il est possible d'écrire des données dans un fichier en utilisant la fonction fprintf. La syntaxe de l'appel à cette fonction est :
fprintf([id_fichier],"message et [formats]",[paramètres]);
Comme printf, cette fonction peut n'afficher qu'un message. Les paramètres qui terminent l'appel de la fonction sont des valeurs qui peuvent venir s'insérer dans le message à afficher. Dans ce cas, la position de ces valeurs dans le message doit être indiquée par des spécificateurs de format.
fprintf(fichier,"valeur No %d = 0\n",i);
La lecture dans un fichier peut également s'effectuer à l'aide de la fonction fread, d'en-tête :
size_t fread(void *tab,size_t t,size_t ninfo,FILE *fich);
où tab est un pointeur sur la zone mémoire recevant les informations lues ; t est la taille de chaque information lue (en octets) ; ninfo est le nombre d'informations à lire ; fich est l'identificateur du fichier, de type FILE *, sur lequel on opère la lecture. Cet identificateur ne doit pas être confondu avec le nom du fichier.
La fonction fread renvoie le nombre d'informations effectivement lues. Ce nombre d'informations peut être inférieur au nombre requis (si le fichier n'en contient pas assez, par exemple).
L'écriture dans un fichier peut également s'effectuer à l'aide de la fonction fwrite, d'en-tête :
size_t fwrite(void *tab,size_t t,size_t ninfo,FILE *fich);
La fonction fwrite renvoie le nombre d'informations effectivement écrites. Ce nombre d'informations peut être inférieur au nombre requis, en cas d'erreur.