Langage C

Traitements de base sur les fichiers en C

Tous les programmes que nous avons créés jusqu’à présent sont limités en ce sens qu’ils ne peuvent ni lire ni écrire des données dans et à partir du fichier.
La plupart des programmes du monde réel nécessiteraient de lire et d'écrire des données dans et à partir du fichier.
Dans ce chapitre, nous allons apprendre à effectuer des opérations d'entrée et de sortie dans un fichier.
C fournit un ensemble de fonctions dans le fichier d’en-tête stdio.h pour la lecture et l’écriture de données dans et à partir du fichier.

Pourquoi les fichiers sont nécessaires?

  • Lorsqu'un programme est terminé, toutes les données sont perdues. Le stockage dans un fichier préservera vos données même si le programme se termine.
  • Si vous devez entrer un grand nombre de données, il vous faudra beaucoup de temps pour les saisir toutes.
    Cependant, si vous avez un fichier contenant toutes les données, vous pouvez facilement accéder au contenu du fichier en utilisant quelques commandes en C.
  • Vous pouvez facilement déplacer vos données d'un ordinateur à un autre sans aucune modification.

Types de fichiers

Lorsque vous traitez avec des fichiers, vous devez connaître deux types de fichiers:

  • Fichiers texte
  • Fichiers binaires

Fichiers texte

en mode texte, les données sont stockées sous la forme d'une ligne de caractères terminée par un caractère newline (‘\n’) où chaque caractère occupe 1 octet.
Ce qui est important à noter en mode texte, ce qui est stocké dans la mémoire est l’équivalent binaire du numéro ASCII du caractère.

Lorsque vous ouvrez ces fichiers, vous allez voir tout le contenu dans le fichier texte. Vous pouvez facilement modifier ou supprimer le contenu. Ils prennent un minimum d'effort à maintenir, sont facilement lisibles, et fournissent la moindre sécurité et prend plus d'espace de stockage.

Fichiers binaires

Les fichiers binaires sont principalement les fichiers .bin de votre ordinateur.

En mode binaire, les données sont stockées sur un disque de la même manière qu’elles sont représentées dans la mémoire de l’ordinateur.

Ils peuvent contenir une plus grande quantité de données, ne sont pas lisibles facilement et offrent une meilleure sécurité que les fichiers texte.

Une autre chose importante à retenir est que les fichiers texte sont portables. Cela signifie que vous pouvez créer un fichier texte sous Windows et l'ouvrir sous Linux sans problème. D'autre part, la taille des types de données et l'ordre des octets peuvent varier d'un système à l'autre. Par conséquent, les fichiers binaires ne sont pas portables.

Travailler avec des fichiers

Mémoire tampon (Buffer)

La lecture et l'écriture vers et à partir des fichiers stockés sur le disque est un processus relativement lent comparé à la lecture et à l'écriture de données stockées dans la RAM. En conséquence, toutes les fonctions d’entrée / sortie standard utilisent un système appelé mémoire tampon pour stocker les données temporairement.

La mémoire tampon est une mémoire dans laquelle les données sont stockées temporairement avant d'être écrites dans le fichier. Lorsque la mémoire tampon est pleine, les données sont écrites (vidées) dans le fichier. De plus, lorsque le fichier est fermé, les données de la mémoire tampon sont automatiquement écrites dans le fichier, que la mémoire tampon soit pleine ou non. Ce processus s'appelle vider le tampon(flushing the buffer).

Vous n'avez pas à faire quelque chose pour créer de la mémoire tampon. Dès que vous ouvrez un fichier, une mémoire tampon sera créé automatiquement.
Cependant, il y a de rares occasions où vous devez vider le tampon manuellement. Si oui, vous appelez utiliser fflush() comme décrit plus loin.

Ouvrir un fichier

L'ouverture d'un fichier est effectuée à l'aide de la fonction fopen() définie dans le fichier d'en-tête stdio.h.

Syntaxe
                                    FILE *fopen(const char *filename, const char *mode);
                            
  • filename: chaîne contenant le nom du fichier.
  • mode: il spécifie ce que vous voulez faire avec le fichier c'est-à-dire lire, écrire, ajouter.

En cas de succès, la fonction fopen() renvoie un pointeur sur la structure de type FILE. La structure FILE est définie dans stdio.h et contient des informations sur le fichier, telles que le nom, la taille, la taille du tampon, la position actuelle, la fin du fichier, etc.
En cas d'erreur, la fonction fopen() renvoie NULL.

Les valeurs possibles des modes sont:

  • "w" (write) – Ce mode est utilisé pour écrire des données dans le fichier. Si le fichier n'existe pas, ce mode crée un nouveau fichier. Si le fichier existe déjà ce mode efface d'abord les données contenues dans le fichier avant d'écrire quoi que ce soit.
  • "a" (append) – Ce mode est appelé mode ajout. Si le fichier n'existe pas, ce mode crée un nouveau fichier. Si le fichier existe déjà ce mode ajoute de nouvelles données à la fin du fichier.
  • "r" (read) – ce mode ouvre le fichier pour la lecture. Pour ouvrir un fichier dans ce mode, le fichier doit déjà exister. Ce mode ne modifie pas le contenu du fichier. Utilisez ce mode si vous voulez seulement lire le contenu du fichier.
  • "W+"(write + read) – ce mode est identique à "w" mais dans ce mode, vous pouvez également lire les données. Si le fichier n'existe pas, ce mode crée un nouveau fichier. Si le fichier existe déjà, les données précédentes sont effacées avant d'écrire de nouvelles données.
  • "r+" (read + write) - ce mode est identique au mode "r", mais vous pouvez également modifier le contenu du fichier. Pour ouvrir le fichier dans ce mode le fichier doit déjà exister. Vous pouvez modifier les données dans ce mode, mais le contenu du fichier n'est pas effacé. Ce mode est aussi appelé mode update(mise à jour).
  • "a+ "(append + read) – ce mode est le même que le mode "a" mais dans ce mode, vous pouvez également lire les données du fichier. Si le fichier n'existe pas alors un nouveau fichier est créé. Si le fichier existe déjà, alors les nouvelles données sont ajoutées à la fin du fichier. Notez que dans ce mode, vous pouvez ajouter des données mais ne pouvez pas modifier les données existantes.

Pour ouvrir le fichier en mode binaire, vous devez ajouter "b" à la mode comme ceci:

ModeDescription
"wb"Ouvrir le fichier en mode binaire
"a+b" ou "ab+"Ouvrir le fichier en mode append + read
Remarque ! le mode étant une chaîne, vous devez toujours utiliser des guillemets doubles autour de celle-ci.
                                fopen("nomFichier.txt", 'r'); // Erreur
                                fopen("nomFichier.txt", "r"); // Ok
                            

Lorsque vous travaillez avec des fichiers, vous devez déclarer un pointeur de type File. Cette déclaration est nécessaire pour la communication entre le fichier et le programme.

                                File *f;
                            

Vérification des erreurs

Comme déjà dit fopen() retourne NULL quand une erreur est rencontrée lors de l'ouverture d'un fichier. Donc, avant de faire toute opération sur le fichier, vous devez toujours vérifier l'overture du fichier.

                                File *f;
                                f = fopen("nomFichier.txt", "r");

                                if(f==NULL){
                                    printf("Erreur lors de l'ouverture d'un fichier");
                                    exit(1);
                                }
                            

Fermer un fichier

Le fichier (texte et binaire) doit être fermé après lecture / écriture.
La fermeture d'un fichier est effectuée à l'aide de la fonction fclose().

                                fclose(f);
                            

Ici, f est un pointeur de fichier (File) associé au fichier à fermer.

Exemple :
                                File *f;
                                f = fopen("nomFichier.txt", "r");
    
                                if(f==NULL){
                                    printf("Erreur lors de l'ouverture d'un fichier");
                                    exit(1);
                                }

                                // traitement sur le fichier 

                                fclose(f);
                            

Partager ce cours avec tes amis :

Rédigé par M. ESSADDOUKI

Learning a new programming language is an easy thing, but the most difficult thing is how to design efficient algorithms for real-world problems, so don't be a programmer, be a problems solver.

Cours Similaires :