English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tutoriel de base en langage C

Contrôle de flux en langage C

Fonctions du langage C

Tableaux en langage C

Pointeurs en langage C

Chaine de caractères en langage C

Structures en langage C

Fichiers en langage C

Autres C

Manuel de référence du langage C

Lecture/écriture de fichiers en langage C

Dans ce tutoriel, vous apprendrez à gérer les fichiers en langage C. Vous apprendrez à utiliser fprintf(), fscanf(), fread(), fwrite(), fseek() et d'autres pour gérer les entrées/sorties standard en langage C à travers des exemples./O.

Les fichiers sont des conteneurs utilisés dans les dispositifs de stockage informatique pour stocker des données.

Pourquoi avons-nous besoin de fichiers ?

  • Lorsque le programme se termine, toutes les données seront perdues. Même si le programme se termine, les données stockées dans le fichier seront conservées.

  • Si vous devez entrer une grande quantité de données, cela prendra beaucoup de temps pour les saisir toutes.
    Cependant, si vous avez un fichier contenant toutes les données, vous pouvez accéder facilement au contenu du fichier en utilisant certaines commandes en C.

  • Vous pouvez facilement déplacer des données d'un ordinateur à un autre sans需要进行任何更改。

Types de fichiers

Lors du traitement des fichiers, vous devriez comprendre deux types de fichiers :

  1. fichiers texte

  2. fichiers binaires

1.fichiers texte

Les fichiers texte sont des.txtfichiers. Vous pouvez créer des fichiers texte en utilisant n'importe quel éditeur de texte simple (par exemple, Notepad).

Lorsque vous ouvrez ces fichiers, vous verrez tout le contenu du fichier sous forme de texte pur. Vous pouvez facilement éditer ou supprimer le contenu.

Ils sont faciles à lire, nécessitent le moins de maintenance, offrent la sécurité la moins élevée et occupent plus d'espace de stockage.

2.fichiers binaires

Les fichiers binaires sont principalement utilisés dans les.binfichier.

Ils ne stockent pas les données au format texte pur, mais au format binaire (0 et1) pour stocker des données.

Comparativement aux fichiers texte, ils peuvent容纳 plus de données, sont plus difficiles à lire et offrent une meilleure sécurité.

Opérations sur les fichiers

En C, vous pouvez effectuer quatre opérations principales sur les fichiers :

  1. Créer un nouveau fichier

  2. Ouvrir un fichier existant

  3. Fermeture du fichier

  4. Lire des informations et écrire des informations dans le fichier

Traiter les fichiers

Lors du traitement des fichiers, il est nécessaire de déclarer un pointeur de type de fichier. Cette déclaration est nécessaire pour la communication entre le fichier et le programme.

FILE *fptr;

Ouvrir un fichier-Utilisé pour créer et éditer

L'utilisation de la fonction fopen() définie dans le fichier d'en-tête stdio.h pour ouvrir un fichier.

Dans l'interface standard I / La syntaxe pour ouvrir un fichier en O est :

ptr = fopen("fileopen","mode");

Par exemple,

fopen("E:\\cprogram\\newprogram.txt","w");
fopen("E:\\cprogram\\oldprogram.bin","rb");
  • Supposons que le fichier newprogram.txt n'existe pas dans le chemin E:\cprogram. La première fonction crée un nouveau fichier nommé newprogram.txt et selon'w'Ouvrir le fichier pour écrire en mode
    Le mode écriture vous permet de créer et d'éditer (écraser) le contenu du fichier.

  • Supposons maintenant que le deuxième fichier binaire oldprogram.bin existe dans le chemin E:\cprogram. La deuxième fonction ouvre un fichier existant, en mode binaire'rb'Lecture.
    Le mode lecture ne vous permet que de lire le fichier, sans pouvoir écrire dans le fichier.

I / Les modes d'ouverture dans O
ModeLe sens du modePendant que le fichier n'existe pas
rEn modeLectureModeOuvrir.

Si le fichier n'existe pas, fopen() renvoie NULL.

rb

Ouvrir en mode binaire pour lire

Si le fichier n'existe pas, fopen() renvoie NULL.
wOuvrir un fichier texte qui permet d'écrire dans le fichier

Ouvrir un fichier texte qui permet d'écrire dans le fichier. S'il n'existe pas, un nouveau fichier sera créé.

Ici, votre programme écrira du contenu à partir du début du fichier.

Si le fichier existe, il sera tronqué à la longueur zéro et réécrit.

wb

Ouvrir le fichier pour écrire en mode binaire

Si le fichier existe, son contenu sera écrasé.
Si le fichier n'existe pas, il sera créé.
aOuvrir pour ajouter
Les données sont ajoutées à la fin du fichier.

Si le fichier n'existe pas, il sera créé.

ab

Ouvrir en mode binaire pour ajouter

Les données sont ajoutées à la fin du fichier.

Si le fichier n'existe pas, il sera créé.
r+Ouvrir pour lecture et écriture

Si le fichier n'existe pas, fopen() renvoie NULL.

rb+

Ouvrir en mode binaire pour lire et écrire

Si le fichier n'existe pas, fopen() renvoie NULL.
w+Ouvrir un fichier texte qui permet de lire et écrire le fichier

Si le fichier existe, son contenu sera écrasé.

Si le fichier n'existe pas, il sera créé.

wb+

Ouvrir en mode binaire pour lire et écrire

Si le fichier existe, son contenu sera écrasé.
Si le fichier n'existe pas, il sera créé.
a+Ouvrir pour lire et ajouter

Si le fichier n'existe pas, il sera créé.

ab+

Ouvrir en mode binaire pour lire et ajouter

Si le fichier n'existe pas, il sera créé.

Fermeture du fichier

Lecture/Après l'écriture, le fichier doit être fermé (fichier texte et fichier binaire).

La fonction fclose() peut fermer le fichier.

fclose(fptr);

Ici, fptr est le pointeur de fichier associé au fichier à fermer.

Lecture et écriture de fichiers texte

Pour lire et écrire des fichiers texte, nous utilisons les fonctions fprintf() et fscanf().

Ils ne sont que des versions de fichier de printf() et scanf(). La seule différence est que fprint() et fscanf() nécessitent un pointeur vers la structure FILE.

Exemple1:écrire dans un fichier texte

#include <stdio.h>
#include <stdlib.h>
int main()
{
   int num;
   FILE *fptr;
   // Si vous utilisez MacOS ou Linux, veuillez utiliser le chemin correct
   fptr = fopen("C:\\program.txt","w");
   if(fptr == NULL)
   {
      printf("Error!");   
      exit(1);             
   }
   printf("Enter num: ");
   scanf("%d",&num);
   fprintf(fptr,"%d",num);
   fclose(fptr);
   return 0;
}

Ce programme récupère un numéro de l'utilisateur et le stocke dans le fichier program.txt.

Après avoir compilé et exécuté ce programme, vous pouvez voir le fichier texte program.txt créé sur le lecteur C de l'ordinateur. Lorsque vous ouvrez le fichier, vous pouvez voir les entiers entrés.

Exemple2:Lire à partir de fichier texte

#include <stdio.h>
#include <stdlib.h>
int main()
{
   int num;
   FILE *fptr;
   if ((fptr = fopen("C:\\program.txt","r")) == NULL){
       printf("Erreur ! Ouvrant le fichier");
       //Si le pointeur de fichier retourne NULL, le programme se termine.
       exit(1);
   }
   fscanf(fptr,"%d", &num);
   printf("Value of n=%d", num);
   fclose(fptr); 
  
   return 0;
}

Ce programme lit les entiers existants dans le fichier program.txt et les affiche sur l'écran.

Si vous lisezExemple1Le fichier a été créé avec succès, exécutez ce programme pour obtenir les entiers entrés.

D'autres fonctions, telles que fgetchar(), fputc() et autres, peuvent être utilisées de la même manière.

Lecture-écriture de fichiers binaires

Dans le cas des fichiers binaires, les fonctions fread() et fwrite() sont utilisées respectivement pour lire et écrire sur le disque.

Écrire dans un fichier binaire

Pour écrire dans un fichier binaire, il faut utiliser la fonction fwrite(). Ces fonctions prennent quatre paramètres :

  1. L'adresse des données à écrire sur le disque

  2. La taille des données à écrire sur le disque

  3. Le nombre de tels données

  4. Le pointeur vers le fichier à écrire.

fwrite(addressData, sizeData, numbersData, pointerToFile);

Exemple3:Utiliser fwrite() pour écrire dans le fichier binaire

#include <stdio.h>
#include <stdlib.h>
struct threeNum
{
   int n1, n2, n3;
});
int main()
{
   int n;
   struct threeNum num;
   FILE *fptr;
   if ((fptr = fopen("C:\\program.bin","wb")) == NULL){
       printf("Erreur ! Ouvrant le fichier");
       // Si le pointeur de fichier retourne NULL, le programme se termine.
       exit(1);
   }
   for(n = 1; n < 5; ++n);
   {
      num.n1 = n;
      num.n2 = 5*n;
      num.n3 = 5*n + 1;
      fwrite(&num, sizeof(struct threeNum), 1, fptr); 
   }
   fclose(fptr); 
  
   return 0;
}

Dans ce programme, nous créons un nouveau fichier program.bin sur le lecteur C.

Nous déclarons trois nombres n1, n2et n3La structure threeNum, et la définissons dans la fonction principale sous le nom de num.

Maintenant, dans la boucle for, nous utilisons fwrite() pour stocker les valeurs dans le fichier.

Le premier paramètre accepte l'adresse de num, le deuxième paramètre accepte la taille de la structure threeNum.

Puisque nous insérons qu'un seul exemplaire de num, le troisième paramètre est1Le dernier paramètre* fptr pointe vers le fichier où nous devons stocker les données.

Enfin, nous fermons le fichier.

Lire à partir de fichier binaire

La fonction fread() utilise également des paramètres similaires à ceux de la fonction fwrite() précédemment mentionnée.4paramètres.

fread(addressData, sizeData, numbersData, pointerToFile);

Exemple4: Lire à partir de fichier binaire en utilisant fread()

#include <stdio.h>
#include <stdlib.h>
struct threeNum
{
   int n1, n2, n3;
});
int main()
{
   int n;
   struct threeNum num;
   FILE *fptr;
   if ((fptr = fopen("C:\\program.bin","rb")) == NULL){
       printf("Erreur ! Ouvrant le fichier");
       //Si le pointeur de fichier retourne NULL, le programme se termine.
       exit(1);
   }
   for(n = 1; n < 5; ++n);
   {
      fread(&num, sizeof(struct threeNum), 1, fptr); 
      printf("\n"1: %d\t\n2: %d\t\n3: %d\", num.n1, num.n2, num.n3);
   }
   fclose(fptr); 
  
   return 0;
}

Dans ce programme, vous lisez le même fichier program.bin et parcourez les enregistrements individuellement en boucle.

En termes simples, vous obtiendrez* Lecture d'un threeNum de la taille de threeNum dans le fichier pointé par fptr*fptrnum enregistrer dans la structure num.

Vous obtiendrezExemple3DansEnregistrer des enregistrements identiques.

Obtenir des données en utilisant fseek()

Si le fichier contient de nombreux enregistrements et qu'il faut accéder à un enregistrement spécifique, il faut parcourir tous les enregistrements pour obtenir cet enregistrement.

Cela gaspillerait beaucoup de mémoire et de temps d'opération. L'utilisation de fseek() peut obtenir les données nécessaires de manière simple.

Comme son nom l'indique, fseek() positionne le curseur sur le record donné dans le fichier.

Syntaxe de fseek()

fseek(FILE * stream, long int offset, int whence);

Le premier paramètre stream est un pointeur vers le fichier. Le deuxième paramètre est la position du record à trouver, et le troisième paramètre spécifie l'emplacement de départ de l'offset.

Différentes positions dans fseek()
PositionSignification
SEEK_SETDéplacer le curseur à partir du début du fichier.
SEEK_END

Déplacer le curseur à partir de la fin du fichier.

SEEK_CUR

Déplacer le curseur à partir de la position actuelle du curseur dans le fichier.

Exemple5:fseek()

#include <stdio.h>
#include <stdlib.h>
struct threeNum
{
   int n1, n2, n3;
});
int main()
{
   int n;
   struct threeNum num;
   FILE *fptr;
   if ((fptr = fopen("C:\\program.bin","rb")) == NULL){
       printf("Erreur ! Ouvrant le fichier");
       //Si le pointeur de fichier retourne NULL, le programme se termine.
       exit(1);
   }
   
   // Déplacer le curseur à la fin du fichier.
   fseek(fptr, -sizeof(struct threeNum), SEEK_END);
   for(n = 1; n < 5; ++n);
   {
      fread(&num, sizeof(struct threeNum), 1, fptr); 
      printf("\n"1: %d\t\n2: %d\t\n3: %d\n", num.n1, num.n2, num.n3);
      fseek(fptr, -2*sizeof(struct threeNum), SEEK_CUR);
   }
   fclose(fptr); 
  
   return 0;
}

Ce programme commencera à lire et à imprimer les enregistrements du fichier program.bin dans un ordre inverse (de la dernière à la première).