Maîtrise d'informatique - Module 18
|
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, qui doit comporter deux caractères, indique le mode d'accès : r pour la lecture (read), w pour l'écriture sans concaténation (write), ou a pour l'écriture avec concaténation (append) ; t pour un fichier de texte ou b pour un fichier binaire.
L'ouverture en lecture d'un fichier inexistant affecte la valeur NULL à la variable id_fich. 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.
La fonction feof renvoie une valeur non nulle si la fin du fichier est atteinte, et 0 sinon.
Pour effectuer la lecture de données dans un fichier, il est possible d'utiliser la fonction fscanf. Cette fonction se comporte de la même manière que scanf, en opérant la lecture non plus dans le "buffer d'entrée", mais dans un fichier.
Il est possible d'écrire des données dans un fichier en utilisant la fonction fprintf. Comme printf, cette fonction peut n'afficher qu'un message. Les paramètres qui terminent l'appel de la fonction sont des valeurs d'expressions, 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.
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 taille,size_t nb_infos,FILE *id_fich);
où :
La fonction fread renvoie le nombre d'informations effectivement lues. Ce nombre d'informations peut être inférieur au nombre requis, dans le cas où la fin du fichier est atteinte.
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, dans le cas où l'écriture est effectuée sur un disque saturé.