E/S de fichiers C : créer, ouvrir, lire, écrire et fermer un fichier

Gestion des fichiers C

Un fichier peut être utilisé pour stocker un grand volume de données persistantes. Comme beaucoup d'autres langages, « C » fournit les fonctions de gestion de fichiers suivantes :

  1. Création d'un dossier
  2. Ouverture d'un dossier
  3. Lire un fichier
  4. Ecrire dans un fichier
  5. Fermeture d'un dossier

Voici les fonctions de gestion de fichiers les plus importantes disponibles en « C »,

fonction but
fopen() Créer un fichier ou ouvrir un fichier existant
fclose () Fermeture d'un dossier
fprintf() Écrire un bloc de données dans un fichier
fscanf () Lire les données d'un bloc à partir d'un fichier
obtenirc() Lit un seul caractère à partir d'un fichier
putc () Écrit un seul caractère dans un fichier
obtenir () Lit un entier à partir d'un fichier
putw () Écrire un entier dans un fichier
fchercher () Définit la position d'un pointeur de fichier vers un emplacement spécifié
ftell () Renvoie la position actuelle d'un pointeur de fichier
rembobiner () Définit le pointeur de fichier au début d'un fichier

Comment créer un fichier

Chaque fois que vous souhaitez travailler avec un fichier, la première étape consiste à créer un fichier. Un fichier n'est rien d'autre qu'un espace dans une mémoire où les données sont stockées.

Pour créer un fichier dans un programme 'C', la syntaxe suivante est utilisée,

FILE *fp;
fp = fopen ("file_name", "mode");

Dans la syntaxe ci-dessus, le fichier est une structure de données définie dans la bibliothèque standard.

fopen est une fonction standard utilisée pour ouvrir un fichier.

  • Si le fichier n'est pas présent sur le système, il est alors créé puis ouvert.
  • Si un fichier est déjà présent sur le système, alors il est directement ouvert à l'aide de ce fonction.

fp est un pointeur de fichier qui pointe vers le fichier type.

Chaque fois que vous ouvrez ou créez un fichier, vous devez spécifier ce que vous allez faire avec le fichier. Un fichier en programmation 'C' peut être créé ou ouvert à des fins de lecture/écriture. Un mode est utilisé pour spécifier si vous souhaitez ouvrir un fichier à l'une des fins indiquées ci-dessous. Voici les différents types de modes de programmation « C » qui peuvent être utilisés lorsque vous travaillez avec un fichier.

Mode fichier Description
r Ouvrez un fichier pour le lire. Si un fichier est en mode lecture, aucune donnée n'est supprimée si un fichier est déjà présent sur un système.
w Ouvrez un fichier pour l'écriture. Si un fichier est en mode écriture, alors un nouveau fichier est créé si un fichier n'existe pas du tout. Si un fichier est déjà présent sur un système, toutes les données contenues dans le fichier sont tronquées et il est ouvert à des fins d'écriture.
a Ouvrir un fichier dans
mode ajouter. Si un fichier est en mode ajout, alors le fichier est ouvert. Le contenu du fichier ne change pas.
r+ ouvert à la lecture et à l'écriture dès le début
w+ ouvrir en lecture et en écriture, écraser un fichier
a+ ouvert en lecture et en écriture, ajout au fichier

Dans la syntaxe donnée, le nom de fichier et le mode sont spécifiés sous forme de chaînes et doivent donc toujours être placés entre guillemets doubles.

Mise en situation :

#include <stdio.h>
int main() {
FILE *fp;
fp  = fopen ("data.txt", "w");
}

Sortie :

Le fichier est créé dans le même dossier où vous avez enregistré votre code.

Comment créer un fichier

Vous pouvez spécifier le chemin où vous souhaitez créer votre fichier

#include <stdio.h>
int main() {
FILE *fp;
fp  = fopen ("D://data.txt", "w");
}

Comment créer un fichier

Comment fermer un fichier

Il faut toujours fermer un fichier chaque fois que les opérations sur le fichier sont terminées. Cela signifie que le contenu et les liens vers le fichier sont terminés. Cela évite tout dommage accidentel au fichier.

'C' fournit la fonction fclose pour effectuer une opération de fermeture de fichier. La syntaxe de fclose est la suivante,

fclose (file_pointer);

Mise en situation :

FILE *fp;
fp  = fopen ("data.txt", "r");
fclose (fp);

La fonction fclose prend un pointeur de fichier comme argument. Le fichier associé au pointeur de fichier est ensuite fermé à l'aide de la fonction fclose. Il renvoie 0 si la fermeture a réussi et EOF (fin du fichier) si une erreur s'est produite lors de la fermeture du fichier.

Après la fermeture du fichier, le même pointeur de fichier peut également être utilisé avec d'autres fichiers.

En programmation « C », les fichiers sont automatiquement fermés à la fin du programme. Fermer un fichier manuellement en écrivant la fonction fclose est une bonne pratique de programmation.

Ecrire dans un fichier

En C, lorsque vous écrivez dans un fichier, les caractères de nouvelle ligne « \n » doivent être explicitement ajoutés.

La bibliothèque stdio propose les fonctions nécessaires pour écrire dans un fichier :

  • fputc(char, pointeur_fichier): Il écrit un caractère dans le fichier pointé par file_pointer.
  • fputs(str, file_pointer): Il écrit une chaîne dans le fichier pointé par file_pointer.
  • fprintf (file_pointer, str, variables_lists): Il imprime une chaîne dans le fichier pointé par file_pointer. La chaîne peut éventuellement inclure des spécificateurs de format et une liste de variables variables_lists.

Le programme ci-dessous montre comment effectuer l'écriture dans un fichier :

Fonction fputc() :

#include <stdio.h>
int main() {
        int i;
        FILE * fptr;
        char fn[50];
        char str[] = "Guru99 Rocks\n";
        fptr = fopen("fputc_test.txt", "w"); // "w" defines "writing mode"
        for (i = 0; str[i] != '\n'; i++) {
            /* write to file using fputc() function */
            fputc(str[i], fptr);
        }
        fclose(fptr);
        return 0;
    }

Sortie :

Ecrire dans un fichier

Le programme ci-dessus écrit un seul caractère dans le fputc_test.txt fichier jusqu'à ce qu'il atteigne le symbole de ligne suivant « \n » qui indique que la phrase a été écrite avec succès. Le processus consiste à prendre chaque caractère du tableau et à l'écrire dans le fichier.

Ecrire dans un fichier

  1. Dans le programme ci-dessus, nous avons créé et ouvert un fichier appelé fputc_test.txt en mode écriture et déclarons notre chaîne qui sera écrite dans le fichier.
  2. Nous effectuons une opération d'écriture caractère par caractère en utilisant la boucle for et mettons chaque caractère dans notre fichier jusqu'à ce que le caractère « \n » soit rencontré, puis le fichier est fermé à l'aide de la fonction fclose.

Fonction fputs () :

#include <stdio.h>
int main() {
        FILE * fp;
        fp = fopen("fputs_test.txt", "w+");
        fputs("This is Guru99 Tutorial on fputs,", fp);
        fputs("We don't need to use for loop\n", fp);
        fputs("Easier than fputc function\n", fp);
        fclose(fp);
        return (0);
    }

Sortie :

Ecrire dans un fichier

Ecrire dans un fichier

  1. Dans le programme ci-dessus, nous avons créé et ouvert un fichier appelé fputs_test.txt en mode écriture.
  2. Après avoir effectué une opération d'écriture en utilisant la fonction fputs() en écrivant trois instruments à cordes
  3. Ensuite, le fichier est fermé à l'aide de la fonction fclose.

fprintf()Fonction :

#include <stdio.h>
    int main() {
        FILE *fptr;
        fptr = fopen("fprintf_test.txt", "w"); // "w" defines "writing mode"
        /* write to file */
        fprintf(fptr, "Learning C with Guru99\n");
        fclose(fptr);
        return 0;
    }

Sortie :

Ecrire dans un fichier

Ecrire dans un fichier

  1. Dans le programme ci-dessus, nous avons créé et ouvert un fichier appelé fprintf_test.txt en mode écriture.
  2. Une fois qu'une opération d'écriture est effectuée à l'aide de la fonction fprintf() en écrivant une chaîne, le fichier est fermé à l'aide de la fonction fclose.

Lire des données à partir d'un fichier

Il existe trois fonctions différentes dédiées à la lecture des données d'un fichier

  • fgetc(file_pointer) : Il renvoie le caractère suivant du fichier pointé par le pointeur de fichier. Lorsque la fin du fichier est atteinte, l'EOF est renvoyé.
  • fgets(tampon, n, file_pointer) : Il lit n-1 caractères du fichier et stocke la chaîne dans un tampon dans lequel le caractère NULL '\0' est ajouté comme dernier caractère.
  • fscanf (file_pointer, conversion_specifiers, variable_adresses): Il est utilisé pour analyser et analyser les données. Il lit les caractères du fichier et attribue l'entrée à une liste de pointeurs variables variable_adresses utilisant des spécificateurs de conversion. Gardez à l'esprit que comme avec scanf, fscanf arrête de lire une chaîne lorsqu'un espace ou une nouvelle ligne est rencontré.

Le programme suivant montre la lecture du fichier fputs_test.txt en utilisant respectivement les fonctions fgets(),fscanf() et fgetc() :

#include <stdio.h>
int main() {
        FILE * file_pointer;
        char buffer[30], c;

        file_pointer = fopen("fprintf_test.txt", "r");
        printf("----read a line----\n");
        fgets(buffer, 50, file_pointer);
        printf("%s\n", buffer);

        printf("----read and parse data----\n");
        file_pointer = fopen("fprintf_test.txt", "r"); //reset the pointer
        char str1[10], str2[2], str3[20], str4[2];
        fscanf(file_pointer, "%s %s %s %s", str1, str2, str3, str4);
        printf("Read String1 |%s|\n", str1);
        printf("Read String2 |%s|\n", str2);
        printf("Read String3 |%s|\n", str3);
        printf("Read String4 |%s|\n", str4);

        printf("----read the entire file----\n");

        file_pointer = fopen("fprintf_test.txt", "r"); //reset the pointer
        while ((c = getc(file_pointer)) != EOF) printf("%c", c);

        fclose(file_pointer);
        return 0;
    }

Résultat:

----read a line----
Learning C with Guru99

----read and parse data----
Read String1 |Learning|
Read String2 |C|
Read String3 |with|
Read String4 |Guru99|
----read the entire file----
Learning C with Guru99

Lire des données à partir d'un fichier

  1. Dans le programme ci-dessus, nous avons ouvert le fichier appelé « fprintf_test.txt » qui a été précédemment écrit à l'aide de la fonction fprintf() et qui contient la chaîne « Learning C with Guru99 ». Nous le lisons en utilisant la fonction fgets() qui lit ligne par ligne où la taille du tampon doit être suffisante pour gérer la ligne entière.
  2. Nous rouvrons le fichier pour réinitialiser le fichier pointeur pour qu'il pointe au début du fichier. Créez diverses variables de chaînes pour gérer chaque mot séparément. Imprimez les variables pour voir leur contenu. Le fscanf() est principalement utilisé pour extraire et analyser les données d'un fichier.
  3. Rouvrez le fichier pour réinitialiser le fichier pointeur pour qu'il pointe au début du fichier. Lisez les données et imprimez-les à partir du fichier caractère par caractère à l'aide de la fonction getc() jusqu'à ce que l'instruction EOF soit rencontrée
  4. Après avoir effectué une opération de lecture du fichier en utilisant différentes variantes, nous avons à nouveau fermé le fichier à l'aide de la fonction fclose.

Lecture et écriture de fichiers interactifs avec getc et putc

Ce sont les opérations sur les fichiers les plus simples. Getc signifie obtenir le caractère et putc signifie mettre le caractère. Ces deux fonctions permettent de gérer un seul caractère à la fois.

Le programme suivant illustre les fonctions de gestion de fichiers dans la programmation « C » :

#include <stdio.h>
int main() {
        FILE * fp;
        char c;
        printf("File Handling\n");
        //open a file
        fp = fopen("demo.txt", "w");
        //writing operation
        while ((c = getchar()) != EOF) {
            putc(c, fp);
        }
        //close file
        fclose(fp);
        printf("Data Entered:\n");
        //reading
        fp = fopen("demo.txt", "r");
        while ((c = getc(fp)) != EOF) {
            printf("%c", c);
        }
        fclose(fp);
        return 0;
    }

Sortie :

Lecture et écriture de fichiers interactifs avec getc et putc

Lecture et écriture de fichiers interactifs avec getc et putc

  1. Dans le programme ci-dessus, nous avons créé et ouvert un fichier appelé démo en mode écriture.
  2. Une fois l’opération d’écriture effectuée, le fichier est fermé à l’aide de la fonction fclose.
  3. Nous avons à nouveau ouvert un fichier qui contient désormais des données en mode lecture. Une boucle while s'exécutera jusqu'à ce que l'eof soit trouvé. Une fois la fin du fichier trouvée, l'opération sera terminée et les données seront affichées à l'aide de la fonction printf.
  4. Après avoir effectué une opération de lecture, le fichier est à nouveau fermé à l'aide de la fonction fclose.

Résumé

  • Un fichier est un espace dans une mémoire où les données sont stockées.
  • La programmation « C » fournit diverses fonctions pour gérer un fichier.
  • Un mécanisme de manipulation des fichiers est appelé gestion de fichiers.
  • Un fichier doit être ouvert avant d'effectuer des opérations sur celui-ci.
  • Un fichier peut être ouvert en mode lecture, écriture ou ajout.
  • Les fonctions Getc et putc sont utilisées pour lire et écrire un seul caractère.
  • La fonction fscanf() permet de lire et d'analyser les données d'un fichier
  • On peut lire (en utilisant le getc fonction) un fichier entier en boucle pour couvrir tout le fichier jusqu'à ce que l'EOF soit rencontré
  • On peut écrire dans un fichier après avoir créé son nom, en utilisant la fonction fprintf() et il doit avoir le caractère de nouvelle ligne à la fin de la chaîne de texte.