Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial programming >> Langue C

Gestion des fichiers C

Gestion des fichiers C

Dans ce tutoriel, vous apprendrez la gestion des fichiers en C. Vous apprendrez à gérer les E/S standard en C en utilisant fprintf(), fscanf(), fread(), fwrite(), fseek() etc. avec l'aide de exemples.

Un fichier est un conteneur dans les périphériques de stockage informatique utilisé pour stocker des données.

Pourquoi les fichiers sont-ils 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 saisir un grand nombre de données, cela prendra beaucoup de temps pour toutes les saisir.
    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 des fichiers, il existe deux types de fichiers que vous devez connaître :

  1. Fichiers texte
  2. Fichiers binaires

1. Fichiers texte

Les fichiers texte sont les .txt normaux des dossiers. Vous pouvez facilement créer des fichiers texte à l'aide de n'importe quel éditeur de texte simple tel que le Bloc-notes.

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

Ils nécessitent un minimum d'efforts pour être entretenus, sont facilement lisibles, offrent le moins de sécurité et occupent un espace de stockage plus important.

2. Fichiers binaires

Les fichiers binaires sont principalement le .bin fichiers sur votre ordinateur.

Au lieu de stocker les données en texte brut, ils les stockent sous forme binaire (0 et 1).

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.

Opérations sur les fichiers

En C, vous pouvez effectuer quatre opérations majeures sur les fichiers, qu'ils soient texte ou binaire :

  1. Création d'un nouveau fichier
  2. Ouvrir un fichier existant
  3. Fermer un fichier
  4. Lire et écrire des informations dans un fichier

Travailler avec des fichiers

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 *fptr;

Ouverture d'un fichier - pour création et modification

L'ouverture d'un fichier s'effectue à l'aide du fopen() fonction définie dans le stdio.h fichier d'en-tête.

La syntaxe pour ouvrir un fichier en E/S standard est :

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

Par exemple,

fopen("E:\\cprogram\\newprogram.txt","w");

fopen("E:\\cprogram\\oldprogram.bin","rb");
  • Supposons le fichier newprogram.txt n'existe pas à l'emplacement E:\cprogram . La première fonction crée un nouveau fichier nommé newprogram.txt et l'ouvre pour l'écriture selon le mode 'w' .
    Le mode écriture vous permet de créer et de modifier (écraser) le contenu du fichier.
  • Supposons maintenant le deuxième fichier binaire oldprogram.bin existe à l'emplacement E:\cprogram . La seconde fonction ouvre le fichier existant en lecture en mode binaire 'rb' .
    Le mode lecture vous permet uniquement de lire le fichier, vous ne pouvez pas écrire dans le fichier.
Modes d'ouverture dans les E/S standard
Mode Signification du mode Pendant l'inexistence du fichier
r Ouvert pour lecture. Si le fichier n'existe pas, fopen() renvoie NULL.
rb Ouvert en lecture en mode binaire. Si le fichier n'existe pas, fopen() renvoie NULL.
w Ouvert pour l'écriture. Si le fichier existe, son contenu est écrasé.
Si le fichier n'existe pas, il sera créé.
wb Ouvert pour l'écriture en mode binaire. Si le fichier existe, son contenu est écrasé.
Si le fichier n'existe pas, il sera créé.
a Ouvert pour ajout.
Les données sont ajoutées à la fin du fichier.
Si le fichier n'existe pas, il sera créé.
ab Ouvrir pour ajouter en mode binaire.
Les données sont ajoutées à la fin du fichier.
Si le fichier n'existe pas, il sera créé.
r+ Ouvert pour la lecture et l'écriture. Si le fichier n'existe pas, fopen() renvoie NULL.
rb+ Ouvert pour la lecture et l'écriture en mode binaire. Si le fichier n'existe pas, fopen() renvoie NULL.
w+ Ouvert pour la lecture et l'écriture. Si le fichier existe, son contenu est écrasé.
Si le fichier n'existe pas, il sera créé.
wb+ Ouvert pour la lecture et l'écriture en mode binaire. Si le fichier existe, son contenu est écrasé.
Si le fichier n'existe pas, il sera créé.
a+ Ouvert pour la lecture et l'ajout. Si le fichier n'existe pas, il sera créé.
ab+ Ouvert pour la lecture et l'ajout en mode binaire. Si le fichier n'existe pas, il sera créé.

Fermer un fichier

Le fichier (texte et binaire) doit être fermé après lecture/écriture.

La fermeture d'un fichier s'effectue à l'aide du fclose() fonction.

fclose(fptr);

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

Lire et écrire dans un fichier texte

Pour lire et écrire dans un fichier texte, nous utilisons les fonctions fprintf() et fscanf().

Ce ne sont que les versions de fichier de printf() et scanf() . La seule différence est que fprintf() et fscanf() attend un pointeur vers la structure FILE.

Exemple 1 :Écrire dans un fichier texte

#include <stdio.h>
#include <stdlib.h>

int main()
{
   int num;
   FILE *fptr;

   // use appropriate location if you are using MacOS or Linux
   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 prend 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 un fichier texte program.txt créé dans le lecteur C de votre ordinateur. Lorsque vous ouvrez le fichier, vous pouvez voir le nombre entier que vous avez saisi.

Exemple 2 :Lire à partir d'un fichier texte

#include <stdio.h>
#include <stdlib.h>

int main()
{
   int num;
   FILE *fptr;

   if ((fptr = fopen("C:\\program.txt","r")) == NULL){
       printf("Error! opening file");

       // Program exits if the file pointer returns NULL.
       exit(1);
   }

   fscanf(fptr,"%d", &num);

   printf("Value of n=%d", num);
   fclose(fptr); 
  
   return 0;
}

Ce programme lit l'entier présent dans le program.txt fichier et l'imprime à l'écran.

Si vous avez réussi à créer le fichier de l'Exemple 1 , l'exécution de ce programme vous donnera le nombre entier que vous avez entré.

Autres fonctions comme fgetchar() , fputc() etc. peuvent être utilisés de la même manière.

Lecture et écriture dans un fichier binaire

Fonctions fread() et fwrite() sont utilisés pour lire et écrire dans un fichier sur le disque respectivement dans le cas de fichiers binaires.

Écrire dans un fichier binaire

Pour écrire dans un fichier binaire, vous devez utiliser le fwrite() fonction. Les fonctions prennent quatre arguments :

  1. adresse des données à écrire sur le disque
  2. taille des données à écrire sur le disque
  3. nombre de ce type de données
  4. pointeur vers le fichier où vous voulez écrire.
fwrite(addressData, sizeData, numbersData, pointerToFile);

Exemple 3 :Écrire dans un fichier binaire à l'aide de fwrite()

#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("Error! opening file");

       // Program exits if the file pointer returns NULL.
       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 dans le lecteur C.

On déclare une structure threeNum avec trois nombres - n1, n2 et n3 , et définissez-le dans la fonction principale comme num.

Maintenant, à l'intérieur de la boucle for, nous stockons la valeur dans le fichier en utilisant fwrite() .

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

Puisque nous n'insérons qu'une seule instance de num , le troisième paramètre est 1 . Et, le dernier paramètre *fptr pointe vers le fichier dans lequel nous stockons les données.

Enfin, nous fermons le fichier.

Lecture depuis un fichier binaire

Fonction fread() prend également 4 arguments similaires au fwrite() fonctionner comme ci-dessus.

fread(addressData, sizeData, numbersData, pointerToFile);

Exemple 4 :Lire à partir d'un fichier binaire à l'aide de 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("Error! opening file");

       // Program exits if the file pointer returns NULL.
       exit(1);
   }

   for(n = 1; n < 5; ++n)
   {
      fread(&num, sizeof(struct threeNum), 1, fptr); 
      printf("n1: %d\tn2: %d\tn3: %d\n", num.n1, num.n2, num.n3);
   }
   fclose(fptr); 
  
   return 0;
}

Dans ce programme, vous lisez le même fichier program.bin et parcourir les enregistrements un par un.

En termes simples, vous lisez un threeNum enregistrement de threeNum taille du fichier pointé par *fptr dans la structure num .

Vous obtiendrez les mêmes enregistrements que vous avez insérés dans Exemple 3 .

Obtenir des données à l'aide de fseek()

Si vous avez de nombreux enregistrements dans un fichier et que vous avez besoin d'accéder à un enregistrement à une position spécifique, vous devez parcourir tous les enregistrements avant pour obtenir l'enregistrement.

Cela gaspillera beaucoup de mémoire et de temps de fonctionnement. Un moyen plus simple d'accéder aux données requises peut être obtenu en utilisant fseek() .

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

Syntaxe de fseek()

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

Le premier flux de paramètres est le pointeur vers le fichier. Le deuxième paramètre est la position de l'enregistrement à rechercher et le troisième paramètre spécifie l'emplacement où commence le décalage.

Différentes provenances dans fseek()
D'où Signification
SEEK_SET Commence le décalage depuis le début du fichier.
SEEK_END Commence le décalage à partir de la fin du fichier.
SEEK_CUR Démarre le décalage à partir de l'emplacement actuel du curseur dans le fichier.

Exemple 5 :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("Error! opening file");

       // Program exits if the file pointer returns NULL.
       exit(1);
   }
   
   // Moves the cursor to the end of the file
   fseek(fptr, -sizeof(struct threeNum), SEEK_END);

   for(n = 1; n < 5; ++n)
   {
      fread(&num, sizeof(struct threeNum), 1, fptr); 
      printf("n1: %d\tn2: %d\tn3: %d\n", num.n1, num.n2, num.n3);
      fseek(fptr, -2*sizeof(struct threeNum), SEEK_CUR);
   }
   fclose(fptr); 
  
   return 0;
}

Ce programme commencera à lire les enregistrements du fichier program.bin dans l'ordre inverse (du dernier au premier) et l'imprime.


Langue C

  1. Classe de fichier Java
  2. Une introduction aux fichiers STL
  3. Opérations Verilog File IO
  4. C - Fichier E/S
  5. C - Fichiers d'en-tête
  6. C - Traitement des erreurs
  7. Fichiers et flux C++
  8. Gestion des signaux C++
  9. C# - Gestion des exceptions