Lecture et écriture de fichiers C


Dans le chapitre précédent, nous avons expliqué les périphériques d'entrée et de sortie standard pour le traitement du langage C. Dans ce chapitre, nous présenterons comment les programmeurs C créent, ouvrent et ferment des fichiers texte ou binaires.

Un fichier, qu'il s'agisse d'un fichier texte ou d'un fichier binaire, représente une série d'octets. Le langage C fournit non seulement des fonctions de niveau supérieur auxquelles accéder, mais fournit également des appels de bas niveau (OS) pour traiter les fichiers sur les périphériques de stockage. Ce chapitre expliquera les appels importants de la gestion de fichiers.

Ouvrir un fichier

Vous pouvez utiliser la fonction fopen() pour créer un nouveau fichier ou ouvrir un fichier existant. Cet appel initialisera le type< An. L'objet de 🎜>FILE de type FILE contient toutes les informations nécessaires au contrôle du flux. Voici le prototype de cet appel de fonction :

FILE *fopen( const char * filename, const char * mode );

Ici,

filename est une chaîne utilisée pour nommer le fichier, et la valeur du mode d'accès mode peut être l'une des valeurs suivantes Une des :

Si vous traitez un fichier binaire, vous devez utiliser le mode d'accès suivant au lieu du mode d'accès ci-dessus :

"rb", "wb", "ab", "rb+", "r+b", "wb+", "w+b", "ab+", "a+b"

Fermez le fichier

Pour fermer le fichier, utilisez le Fonction fclose() . Le prototype de la fonction est le suivant :

 int fclose( FILE *fp );

Si le fichier est fermé avec succès, la fonction fclose() renvoie zéro. Si une erreur se produit lors de la fermeture du fichier, la fonction renvoie <. 🎜>EOF. Cette fonction efface les données du tampon, ferme le fichier et libère toute la mémoire utilisée pour le fichier. EOF est une constante définie dans le fichier d'en-tête stdio.h.

La bibliothèque standard C fournit diverses fonctions pour lire et écrire des fichiers caractère par caractère ou sous forme de chaînes de longueur fixe.

Écrire dans un fichier

Ce qui suit est la fonction la plus simple pour écrire des caractères dans le flux :

int fputc( int c, FILE *fp );

Fonction

fputc() Mettez le paramètre c Le la valeur du caractère est écrite dans le flux de sortie pointé par fp. Il renvoie les caractères écrits si l'écriture a réussi, ou EOF si une erreur s'est produite. Vous pouvez utiliser la fonction suivante pour écrire une chaîne terminée par un caractère nul dans le flux :

int fputs( const char *s, FILE *fp );

la fonction

fputs() écrit la chaîne s dans le flux de sortie pointé vers par fp. Il renvoie une valeur non négative si l'écriture réussit, ou EOF si une erreur se produit. Vous pouvez également utiliser la fonction int fprintf(FILE *fp,const char *format, ...) pour écrire une chaîne dans un fichier. Essayez l'exemple suivant :

Remarque : Veuillez vous assurer que vous disposez du répertoire /tmp, s'il n'existe pas, vous devez le créer sur votre ordinateur d'abord le répertoire.

#include <stdio.h>main(){
   FILE *fp;

   fp = fopen("/tmp/test.txt", "w+");
   fprintf(fp, "This is testing for fprintf...\n");
   fputs("This is testing for fputs...\n", fp);
   fclose(fp);}

Lorsque le code ci-dessus est compilé et exécuté, il crée un nouveau fichier

test.txt dans le répertoire /tmp et écrit deux lignes en utilisant deux fonctions différentes. Lisons ensuite ce fichier.

Lire le fichier

Ce qui suit est la fonction la plus simple pour lire un seul caractère à partir d'un fichier :

int fgetc( FILE * fp );

fgetc() La fonction pointe vers from fp Lire un caractère du fichier d'entrée. La valeur de retour est le caractère lu, ou EOF si une erreur survient. La fonction suivante vous permet de lire une chaîne à partir d'un flux :

char *fgets( char *buf, int n, FILE *fp );

Fonction

fgets() Lit n - 1 caractères du flux d'entrée pointé par fp. Il copie la chaîne lue dans le tampon buf et ajoute un caractère null à la fin pour terminer la chaîne.

Si cette fonction rencontre un caractère de nouvelle ligne 'n' ou un EOF de fin de fichier avant de lire le dernier caractère, seuls les caractères lus, y compris le caractère de nouvelle ligne, sont renvoyés. Vous pouvez également utiliser la fonction

int fscanf(FILE *fp, const char *format, ...) pour lire une chaîne à partir d'un fichier, mais elle s'arrête lorsqu'elle rencontre le premier caractère espace lu.

#include <stdio.h>main(){
   FILE *fp;   char buff[255];

   fp = fopen("/tmp/test.txt", "r");
   fscanf(fp, "%s", buff);
   printf("1 : %s\n", buff );

   fgets(buff, 255, (FILE*)fp);
   printf("2: %s\n", buff );
   
   fgets(buff, 255, (FILE*)fp);
   printf("3: %s\n", buff );
   fclose(fp);}

Lorsque le code ci-dessus est compilé et exécuté, il lit le fichier créé dans la section précédente, produisant les résultats suivants :

1 : This2: is testing for fprintf...3: This is testing for fputs...

Tout d'abord, la méthode fscanf() ne lit que This car elle rencontre un espace après. Deuxièmement, appelez fgets() pour lire le reste jusqu'à la fin de la ligne. Enfin, appelez fgets() pour lire complètement la deuxième ligne.

Fonctions d'E/S binaires

Les deux fonctions suivantes sont utilisées pour les entrées et sorties binaires :

size_t fread(void *ptr, size_t size_of_elements, 
             size_t number_of_elements, FILE *a_file);              size_t fwrite(const void *ptr, size_t size_of_elements, 
             size_t number_of_elements, FILE *a_file);

Les deux fonctions sont utilisées pour lire et écrire des blocs de stockage - est généralement un tableau ou structure.