La remise de fichiers en C est le processus dans lequel nous créons, ouvrons, lisons, écrivons et fermons des opérations sur un fichier. Le langage C fournit différentes fonctions telles que fopen(), fwrite(), fread(), fseek(), fprintf(), etc. pour effectuer des entrées, des sorties et de nombreuses opérations différentes sur les fichiers C dans notre programme.
Pourquoi avons-nous besoin de la gestion des fichiers en C ?
Jusqu'à présent, les opérations utilisant le programme C sont effectuées sur une invite/terminal qui n'est stocké nulle part. La sortie est supprimée à la fermeture du programme. Mais dans l’industrie du logiciel, la plupart des programmes sont écrits pour stocker les informations extraites du programme. Le recours à la gestion de fichiers est exactement ce que la situation appelle.
Afin de comprendre pourquoi la gestion des fichiers est importante, examinons quelques fonctionnalités liées à l'utilisation des fichiers :
- Réutilisabilité : Les données stockées dans le fichier peuvent être consultées, mises à jour et supprimées n'importe où et à tout moment, offrant une grande réutilisabilité.
- Portabilité: Sans perdre aucune donnée, les fichiers peuvent être transférés vers un autre dans le système informatique. Le risque de codage défectueux est minimisé grâce à cette fonctionnalité.
- Efficace: Une grande quantité de données peut être requise pour certains programmes. La gestion des fichiers vous permet d'accéder facilement à une partie d'un fichier en utilisant quelques instructions, ce qui permet de gagner beaucoup de temps et de réduire les risques d'erreurs.
- Capacité de stockage: Les fichiers vous permettent de stocker une grande quantité de données sans avoir à vous soucier de tout stocker simultanément dans un programme.
Types de fichiers en C
Un fichier peut être classé en deux types en fonction de la manière dont il stocke les données. Ils sont les suivants :
- Fichiers texte
- Fichiers binaires
1. Fichiers texte
Un fichier texte contient des données dans le forme de caractères ASCII et est généralement utilisé pour stocker un flux de caractères.
- Chaque ligne d'un fichier texte se termine par un caractère de nouvelle ligne (« »).
- Il peut être lu ou écrit par n’importe quel éditeur de texte.
- Ils sont généralement stockés avec .SMS extension de fichier.
- Les fichiers texte peuvent également être utilisés pour stocker le code source.
2. Fichiers binaires
Un fichier binaire contient des données dans forme binaire (c'est-à-dire des 0 et des 1) au lieu de caractères ASCII. Ils contiennent des données stockées de la même manière que dans la mémoire principale.
exemple de sous-chaîne en java
- Les fichiers binaires ne peuvent être créés qu'à partir d'un programme et leur contenu ne peut être lu que par un programme.
- Plus sécurisés car ils ne sont pas facilement lisibles.
- Ils sont généralement stockés avec .poubelle extension de fichier.
Opérations sur les fichiers C
Les opérations sur les fichiers C font référence aux différentes opérations possibles que l'on peut effectuer sur un fichier en C telles que :
- Création d'un nouveau fichier – fopen() avec des attributs comme a ou a+ ou w ou w+
- Ouverture d'un fichier existant – fopen()
- Lecture à partir d'un fichier – fscanf() ou fgets()
- Écrire dans un fichier – fprintf() ou fputs()
- Déplacement vers un emplacement spécifique dans un fichier – fcherche() , rembobiner()
- Fermer un dossier – fclose()
Le texte en surbrillance mentionne la fonction C utilisée pour effectuer les opérations sur les fichiers.
Fonctions pour les opérations sur les fichiers C

Pointeur de fichier en C
Un pointeur de fichier est une référence à une position particulière dans le fichier ouvert. Il est utilisé dans la gestion des fichiers pour effectuer toutes les opérations sur les fichiers telles que la lecture, l'écriture, la fermeture, etc. Nous utilisons le DÉPOSER macro pour déclarer la variable de pointeur de fichier. La macro FILE est définie à l'intérieur En tête de fichier.
Syntaxe du pointeur de fichier
FILE* pointer_name ;>
Le pointeur de fichier est utilisé dans presque toutes les opérations sur les fichiers en C.
Ouvrir un fichier en C
Pour ouvrir un fichier en C, le fopen() La fonction est utilisée avec le nom du fichier ou le chemin du fichier ainsi que les modes d'accès requis.
Syntaxe de fopen()
FILE* fopen (const char * file_name , const char * access_mode );>
Paramètres
- nom de fichier : nom du fichier lorsqu'il est présent dans le même répertoire que le fichier source. Sinon, chemin complet.
- Mode d'accès: Spécifie pour quelle opération le fichier est ouvert.
Valeur de retour
- Si le fichier est ouvert avec succès, renvoie un pointeur de fichier vers celui-ci.
- Si le fichier n'est pas ouvert, renvoie NULL.
Modes d'ouverture de fichiers en C
Les modes d'ouverture de fichier ou modes d'accès précisent les opérations autorisées sur le fichier à ouvrir. Ils sont passés en argument à la fonction fopen(). Certains des modes d'accès aux fichiers couramment utilisés sont répertoriés ci-dessous :
| Modes d'ouverture | Description |
|---|---|
| r | Recherche le fichier. Si le fichier est ouvert avec succès, fopen() le charge en mémoire et définit un pointeur qui pointe vers le premier caractère qu'il contient. Si le fichier ne peut pas être ouvert, fopen() renvoie NULL. |
| rb | Ouvert en lecture en mode binaire. Si le fichier n'existe pas, fopen() renvoie NULL. |
| Dans | Ouvert pour écrire en mode texte. Si le fichier existe, son contenu est écrasé. Si le fichier n'existe pas, un nouveau fichier est créé. Renvoie NULL si vous ne parvenez pas à ouvrir le fichier. |
| 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éé. |
| un | Recherche le fichier. Si le fichier est ouvert avec succès, fopen() le charge en mémoire et définit un pointeur qui pointe vers le dernier caractère qu'il contient. Il s'ouvre uniquement en mode ajout. Si le fichier n'existe pas, un nouveau fichier est créé. Renvoie NULL si vous ne parvenez pas à ouvrir le fichier. |
| un B | 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+ | Recherche le fichier. Il est ouvert avec succès. Fopen() le charge en mémoire et définit un pointeur qui pointe vers le premier caractère qu'il contient. Renvoie NULL si vous ne parvenez pas à ouvrir le fichier. |
| rb+ | Ouvert à la fois en lecture et en écriture en mode binaire. Si le fichier n'existe pas, fopen() renvoie NULL. |
| w+ | Recherche le fichier. Si le fichier existe, son contenu est écrasé. Si le fichier n'existe pas, un nouveau fichier est créé. Renvoie NULL si vous ne parvenez pas à ouvrir le fichier. |
| wb+ | Ouvert à la fois en lecture et en écriture en mode binaire. Si le fichier existe, son contenu est écrasé. Si le fichier n'existe pas, il sera créé. |
| un+ | Recherche le fichier. Si le fichier est ouvert avec succès, fopen() le charge en mémoire et définit un pointeur qui pointe vers le dernier caractère qu'il contient. Il ouvre le fichier en mode lecture et ajout. Si le fichier n'existe pas, un nouveau fichier est créé. Renvoie NULL si vous ne parvenez pas à ouvrir le fichier. |
| ab+ | Ouvert à la fois en lecture et en ajout en mode binaire. Si le fichier n'existe pas, il sera créé. |
Comme indiqué ci-dessus, si vous souhaitez effectuer des opérations sur un fichier binaire, vous devez alors ajouter « b » à la fin. Par exemple, au lieu de w, vous devez utiliser wb, au lieu de a+ vous devez utiliser a+b.
Exemple d'ouverture d'un fichier
C
// C Program to illustrate file opening> #include> #include> int> main()> {> >// file pointer variable to store the value returned by> >// fopen> >FILE>* fptr;> >// opening the file in read mode> >fptr =>fopen>(>'filename.txt'>,>'r'>);> >// checking if the file is opened successfully> >if> (fptr == NULL) {> >printf>(>'The file is not opened. The program will '> >'now exit.'>);> >exit>(0);> >}> >return> 0;> }> |
>
>Sortir
The file is not opened. The program will now exit.>
Le fichier n'est pas ouvert car il n'existe pas dans le répertoire source. Mais la fonction fopen() est aussi capable de créer un fichier s'il n'existe pas. Il est montré ci-dessous
Créer un fichier en C
La fonction fopen() peut non seulement ouvrir un fichier mais également créer un fichier s'il n'existe pas déjà. Pour cela, nous devons utiliser les modes qui permettent la création d'un fichier s'il n'est pas trouvé comme w, w+, wb, wb+, a, a+, ab et ab+.
FILE *fptr; fptr = fopen (' filename.txt ', ' w ');> Exemple d'ouverture d'un fichier
C
// C Program to create a file> #include> #include> int> main()> {> >// file pointer> >FILE>* fptr;> >// creating file using fopen() access mode 'w'> >fptr =>fopen>(>'file.txt'>,>'w'>);> >// checking if the file is created> >if> (fptr == NULL) {> >printf>(>'The file is not opened. The program will '> >'exit now'>);> >exit>(0);> >}> >else> {> >printf>(>'The file is created Successfully.'>);> >}> > >return> 0;> }> |
>
>Sortir
The file is created Successfully.>
Lecture à partir d'un fichier
L'opération de lecture de fichier en C peut être effectuée à l'aide des fonctions fscanf() ou fgets(). Les deux fonctions effectuent les mêmes opérations que celle de scanf et obtiennent mais avec un paramètre supplémentaire, le pointeur de fichier. Il existe également d'autres fonctions que nous pouvons utiliser pour lire un fichier. Ces fonctions sont répertoriées ci-dessous :
| Fonction | Description |
|---|---|
| fscanf() | Utilisez une chaîne formatée et une liste d'arguments variables pour extraire les entrées d'un fichier. |
| fgets() | Saisissez toute la ligne du fichier. |
| fgetc() | Lit un seul caractère du fichier. |
| obtenir() | Lit un numéro à partir d'un fichier. |
| fread() | Lit les octets de données spécifiés à partir d'un fichier binaire. |
Cela dépend donc de vous si vous souhaitez lire le fichier ligne par ligne ou caractère par caractère.
Exemple:
FILE * fptr; fptr = fopen(fileName.txt, r); fscanf(fptr, '%s %s %s %d', str1, str2, str3, &year); char c = fgetc(fptr);>
Le getc() et certaines autres fonctions de lecture de fichiers renvoient EOF (End Of File) lorsqu'elles atteignent la fin du fichier lors de la lecture. EOF indique la fin du fichier et sa valeur est définie par l'implémentation.
Note: Une chose à noter ici est qu'après avoir lu une partie particulière du fichier, le pointeur de fichier sera automatiquement déplacé à la fin du dernier caractère lu.
Écrire dans un fichier
Les opérations d'écriture de fichiers peuvent être effectuées par les fonctions fprintf() et fputs() avec des similitudes avec les opérations de lecture. La programmation C fournit également d'autres fonctions qui peuvent être utilisées pour écrire des données dans un fichier telles que :
| Fonction | Description |
|---|---|
| fprintf() | Semblable à printf(), cette fonction utilise une chaîne formatée et une liste d'arguments de variables pour imprimer la sortie dans le fichier. |
| fputs() | Imprime la ligne entière du fichier et une nouvelle ligne à la fin. |
| fputc() | Imprime un seul caractère dans le fichier. |
| fputw() | Imprime un numéro dans le fichier. |
| fécrire() | Ces fonctions écrivent la quantité spécifiée d'octets dans le fichier binaire. |
Exemple:
FILE *fptr ; fptr = fopen(fileName.txt, w); fprintf(fptr, '%s %s %s %d', 'We', 'are', 'in', 2012); fputc('a', fptr);> Fermer un fichier
La fonction fclose() est utilisée pour fermer le fichier. Après des opérations réussies sur les fichiers, vous devez toujours fermer un fichier pour le supprimer de la mémoire.
Syntaxe de fclose()
fclose ( file_pointer );>
où le pointeur_fichier est le pointeur vers le fichier ouvert.
Exemple:
FILE *fptr ; fptr= fopen(fileName.txt, w); ---------- Some file Operations ------- fclose(fptr);>
Exemples de gestion de fichiers en C
Exemple 1: Programme pour créer un fichier, y écrire et fermer le fichier
C
instance de en java
// C program to Open a File,> // Write in it, And Close the File> #include> #include> int> main()> {> >// Declare the file pointer> >FILE>* filePointer;> >// Get the data to be written in file> >char> dataToBeWritten[50] =>'techcodeview.com-A Computer '> >'Science Portal for Geeks'>;> >// Open the existing file GfgTest.c using fopen()> >// in write mode using 'w' attribute> >filePointer =>fopen>(>'GfgTest.c'>,>'w'>);> >// Check if this filePointer is null> >// which maybe if the file does not exist> >if> (filePointer == NULL) {> >printf>(>'GfgTest.c file failed to open.'>);> >}> >else> {> >printf>(>'The file is now opened.
'>);> >// Write the dataToBeWritten into the file> >if> (>strlen>(dataToBeWritten)>0) {> >// writing in the file using fputs()> >fputs>(dataToBeWritten, filePointer);> >fputs>(>'
'>, filePointer);> >}> >// Closing the file using fclose()> >fclose>(filePointer);> >printf>(>'Data successfully written in file '> >'GfgTest.c
'>);> >printf>(>'The file is now closed.'>);> >}> > >return> 0;> }> |
>
>Sortir
The file is now opened. Data successfully written in file GfgTest.c The file is now closed.>
Ce programme créera un fichier nommé GfgTest.c dans le même répertoire que le fichier source qui contiendra le texte suivant : techcodeview.com-A Computer Science Portal for Geeks.
Exemple 2 : Programme pour ouvrir un fichier, le lire et fermer le fichier
C
// C program to Open a File,> // Read from it, And Close the File> #include> #include> int> main()> {> >// Declare the file pointer> >FILE>* filePointer;> >// Declare the variable for the data to be read from> >// file> >char> dataToBeRead[50];> >// Open the existing file GfgTest.c using fopen()> >// in read mode using 'r' attribute> >filePointer =>fopen>(>'GfgTest.c'>,>'r'>);> >// Check if this filePointer is null> >// which maybe if the file does not exist> >if> (filePointer == NULL) {> >printf>(>'GfgTest.c file failed to open.'>);> >}> >else> {> >printf>(>'The file is now opened.
'>);> >// Read the dataToBeRead from the file> >// using fgets() method> >while> (>fgets>(dataToBeRead, 50, filePointer)> >!= NULL) {> >// Print the dataToBeRead> >printf>(>'%s'>, dataToBeRead);> >}> >// Closing the file using fclose()> >fclose>(filePointer);> >printf>(> >'Data successfully read from file GfgTest.c
'>);> >printf>(>'The file is now closed.'>);> >}> >return> 0;> }> |
bordure CSS
>
>
Sortir
The file is now opened. techcodeview.com-A Computer Science Portal for Geeks Data successfully read from file GfgTest.c The file is now closed.>
Ce programme lit le texte du fichier nommé GfgTest.c que nous avons créé dans l'exemple précédent et l'imprime dans la console.
Lire et écrire dans un fichier binaire
Jusqu'à présent, nous n'avons discuté que des opérations sur les fichiers texte. Les opérations sur un fichier binaire sont similaires aux opérations sur un fichier texte avec peu de différence.
Ouverture d'un fichier binaire
Pour ouvrir un fichier en mode binaire, nous utilisons les modes d'accès rb, rb+, ab, ab+, wb et wb+ dans la fonction fopen(). Nous utilisons également l'extension de fichier .bin dans le nom du fichier binaire.
Exemple
fptr = fopen('filename.bin', 'rb');> Écrire dans un fichier binaire
Nous utilisons la fonction fwrite() pour écrire des données dans un fichier binaire. Les données sont écrites dans le fichier binaire sous forme de bits (0 et 1).
Syntaxe de fwrite()
size_t fwrite (const void * ptr , size_t size , size_t nmemb , FILE * file_pointer );>
Paramètres:
- point : pointeur vers le bloc de mémoire à écrire.
- taille: taille de chaque élément à écrire (en octets).
- nmembre : nombre d'éléments.
- pointeur_fichier : FILE pointeur vers le flux du fichier de sortie.
Valeur de retour :
- Nombre d'objets écrits.
Exemple: Programme pour écrire dans un fichier binaire en utilisant fwrite()
C
// C program to write to a Binary file using fwrite()> #include> #include> struct> threeNum {> >int> n1, n2, n3;> };> int> main()> {> >int> n;> >// Structure variable declared here.> >struct> threeNum num;> >FILE>* fptr;> >if> ((fptr =>fopen>(>'C:program.bin'>,>'wb'>)) == NULL) {> >printf>(>'Error! opening file'>);> >// If file pointer will return NULL> >// Program will exit.> >exit>(1);> >}> >int> flag = 0;> >// else it will return a pointer to the file.> >for> (n = 1; n <5; ++n) {> >num.n1 = n;> >num.n2 = 5 * n;> >num.n3 = 5 * n + 1;> >flag =>fwrite>(&num,>sizeof>(>struct> threeNum), 1,> >fptr);> >}> >// checking if the data is written> >if> (!flag) {> >printf>(>'Write Operation Failure'>);> >}> >else> {> >printf>(>'Write Operation Successful'>);> >}> >fclose>(fptr);> > >return> 0;> }> |
>
>Sortir
Write Operation Successful>
Lecture à partir d'un fichier binaire
La fonction fread() peut être utilisée pour lire les données d'un fichier binaire en C. Les données sont lues à partir du fichier sous la même forme qu'elles sont stockées, c'est-à-dire sous forme binaire.
algorithmes de tri par insertion
Syntaxe de fread()
size_t fread (void * ptr , size_t size , size_t nmemb , FILE * file_pointer );>
Paramètres:
- point : pointeur vers le bloc de mémoire à lire.
- taille: la taille de chaque élément à lire (en octets).
- nmembre : nombre d'éléments.
- pointeur_fichier : FILE pointeur vers le flux du fichier d’entrée.
Valeur de retour :
- Nombre d'objets écrits.
Exemple: Programme pour lire à partir d'un fichier binaire en utilisant fread()
C
// C Program to Read from a binary file using fread()> #include> #include> 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'>);> >// If file pointer will return NULL> >// Program will exit.> >exit>(1);> >}> >// else it will return a pointer to the file.> >for> (n = 1; n <5; ++n) {> >fread>(&num,>sizeof>(>struct> threeNum), 1, fptr);> >printf>(>'n1: %d n2: %d n3: %d
'>, num.n1, num.n2,> >num.n3);> >}> >fclose>(fptr);> >return> 0;> }> |
>
>
Sortir
n1: 1 n2: 5 n3: 6 n1: 2 n2: 10 n3: 11 n1: 3 n2: 15 n3: 16 n1: 4 n2: 20 n3: 21>
fseek() en C
Si nous avons plusieurs enregistrements dans un fichier et que nous devons accéder à un enregistrement particulier qui se trouve à une position spécifique, nous devons donc parcourir tous les enregistrements précédents pour obtenir l'enregistrement. Faire cela gaspillera beaucoup de mémoire et de temps opérationnel. Pour réduire la consommation de mémoire et le temps de fonctionnement, nous pouvons utiliser fcherche() ce qui offre un moyen plus simple d’accéder aux données requises. La fonction fseek() en C recherche le curseur vers l'enregistrement donné dans le fichier.
Syntaxe pour fseek()
int fseek(FILE *ptr, long int offset, int pos);>
Exemple de fseek()
C
// C Program to demonstrate the use of fseek() in C> #include> int> main()> {> >FILE>* fp;> >fp =>fopen>(>'test.txt'>,>'r'>);> >// Moving pointer to end> >fseek>(fp, 0, SEEK_END);> >// Printing position of pointer> >printf>(>'%ld'>,>ftell>(fp));> >return> 0;> }> |
>
>
Sortir
81>
rembobiner() en C
Le rembobiner() La fonction est utilisée pour amener le pointeur de fichier au début du fichier. Il peut être utilisé à la place de fseek() lorsque vous voulez le pointeur de fichier au début.
Syntaxe de rewind()
rewind ( file_pointer );>
Exemple
C
// C program to illustrate the use of rewind> #include> int> main()> {> >FILE>* fptr;> >fptr =>fopen>(>'file.txt'>,>'w+'>);> >fprintf>(fptr,>'Geeks for Geeks
'>);> >// using rewind()> >rewind>(fptr);> >// reading from file> >char> buf[50];> >fscanf>(fptr,>'%[^
]s'>, buf);> >printf>(>'%s'>, buf);> >return> 0;> }> |
>
récursivité en Java
>Sortir
Geeks for Geeks>
Plus de fonctions pour les opérations sur les fichiers C
Le tableau suivant répertorie d'autres fonctions qui peuvent être utilisées pour effectuer des opérations sur les fichiers ou pour aider à les exécuter.
| Les fonctions | Description |
|---|---|
| fopen() | Il est utilisé pour créer un fichier ou pour ouvrir un fichier. |
| fclose() | Il est utilisé pour fermer un fichier. |
| fgets() | Il est utilisé pour lire un fichier. |
| fprintf() | Il est utilisé pour écrire des blocs de données dans un fichier. |
| fscanf() | Il est utilisé pour lire des blocs de données à partir d’un fichier. |
| obtenirc() | Il est utilisé pour lire un seul caractère dans un fichier. |
| putc() | Il est utilisé pour écrire un seul caractère dans un fichier. |
| fcherche() | Il est utilisé pour définir la position d'un pointeur de fichier vers un emplacement mentionné. |
| ftell() | Il est utilisé pour renvoyer la position actuelle d'un pointeur de fichier. |
| rembobiner() | Il est utilisé pour placer le pointeur de fichier au début d'un fichier. |
| putw() | Il est utilisé pour écrire un entier dans un fichier. |
| getw() | Il est utilisé pour lire un entier dans un fichier. |