Programmation C · 6 min read · Oct 09, 2025

Apprendre C/C++ Étape par Étape - Page 12

12. CorC++ Étape par Étape — Programmation C - Fichiers

Gestion des Fichiers

Introduction

Trouvons la sortie du programme suivant.

| | |

Oui, il accepte un enregistrement d’informations sur les étudiants et l’affiche.
Voici le même programme, mais avec quelques modifications incluses.

| | |

Les deux programmes ci-dessus sont identiques, mais le deuxième programme contient une instruction mise en évidence ( FILE *fp = fopen(“stud.dat”, “a+”);) et quelques modifications comme ‘f printf’, ‘ fp’. Seules quelques modifications ont été incluses. Ces modifications affectent le transfert des données de la console vers la disquette dans le fichier stud.dat. Ce processus est connu sous le nom de contrôle de fichier/gestion de fichier/organisation de fichier.

C’est le moyen le plus simple de transférer la sortie de l’écran vers un fichier en utilisant une instruction de contrôle de fichier.

| | |

En réalité, le traitement des fichiers implique de nombreuses opérations ainsi que des méthodes à mettre en œuvre. Voici le processus réel pour gérer les fichiers.

Gestion des Fichiers

En général, chaque programme doit présenter les valeurs résultantes à l’écran (le 1er programme illustre cela). Mais ces valeurs sont supprimées de la mémoire chaque fois que le programme est terminé. Si nous voulons conserver les enregistrements de manière permanente, nous devons les enregistrer dans un fichier. Chaque fichier a quelques opérations, en voici quelques-unes ;

| | |

| | |

Opérations sur les Fichiers

fopenOuvre le flux filename dans le mode mode & si réussi, retourne un pointeur vers le flux nouvellement ouvert ; ou Null sinon.
Syntaxe **FILE fopen(const char filename, const char *mode);

| Ex. | FILE fp = fopen(“stud.dat”, “r”);   /  Lire depuis le fichier  /
FILE
fp = fopen(“emp.dat”, “w”); /  Écrire dans le fichier  /
FILE fp = fopen(“emp.dat”, “a+”);           /  Lire et Écrire dans le fichier / | | | Mode :
La chaîne de mode utilisée dans les appels à fopen, est l’une des valeurs suivantes :
Mode     Description r Ouvre pour lecture uniquement w Crée pour écrire (Si un fichier portant ce nom existe déjà, il sera écrasé). a Ajoute ; ouvre pour écrire à la fin du fichier, ou crée pour
écrire si le fichier n’existe pas.
r+ Ouvre un fichier existant pour mise à jour (lecture et écriture) w+ Crée un nouveau fichier pour mise à jour (lecture et écriture).
Si un fichier portant ce nom existe déjà, il sera écrasé.
a+ Ouvre pour ajouter ; ouvre pour mise à jour à la fin du fichier, ou
crée si le fichier n’existe pas. Pour spécifier qu’un fichier donné est ouvert ou créé en mode texte,
ajoutez “
t “ à la chaîne ( rt, w+t,*
etc.).

Pour spécifier le mode binaire, ajoutez “ b “ à la chaîne ( wb, a+b, etc.). | | fclose | Ferme le fichier pointé par fp & retourne 0 en cas de succès, EOF est retourné en cas d’erreur | | Syntaxe | Int fclose(FILE *fp); | | ex. | Fclose(fp);  fclose(stud);   fcloseall(); | | fprintf | Envoie une sortie formatée à un flux. Utilise les mêmes spécificateurs de format que printf, mais envoie la sortie au flux spécifié. Retourne le nombre d’octets sortis ou EOF en cas d’erreur. | | Syntaxe | Fprintf(fptr, “Chaîne de Contrôle”, liste); | | Ex. | Fprintf(fp, “%d %s %d %d %d”, sno, name, sub1, sub2, sub3);
fprintf(emp, “%d %s %d”, eno, name, sal); | | fscanf | Cette fonction est utilisée pour lire des données formatées à partir d’un fichier spécifié. | | Syntaxe : | Fscanf(fptr, “Chaîne de Contrôle”, liste); | | Ex. | Fscanf(fp, “%d %s %d %d %d”, &sno, name, &sub1, &sub2, &sub3);
fscanff(emp, “%d %s %d”, &eno, name, &sal); | | fwrite | Fwrite ajoute un nombre spécifié d’éléments de données de taille égale à un fichier de sortie. | | Syntaxe : | Size_t fwrite(const void ptr, size_t size, size_t n, FILEstream); Argument  Ce que c’est/Fait Ptr Pointeur vers n’importe quel objet ; les données écrites commencent à ptr Size Longueur de chaque élément de données N Nombre d’éléments de données à ajouter stream Spécifie le fichier de sortie
Le nombre total d’octets écrits est  (
n size) | | fread | Fread récupère un nombre spécifié d’éléments de données de taille égale à partir d’un fichier d’entrée. | | Syntaxe | Size_t fread(void ptr, size_t size, size_t n, FILEstream); Argument  Ce que c’est/Fait Ptr Pointeur vers n’importe quel objet ; les données écrites commencent à ptr size Longueur de chaque élément de données n Nombre d’éléments de données à ajouter stream Spécifie le fichier de sortie
Le nombre total d’octets écrits est (
n
size) | | rewind
| Repositionne le pointeur de fichier au début du flux | | Syntaxe | Void rewind(FILE stream);
Ex.      fewind(fp);
Rewind(stream) est équivalent à fseek(stream, 0L, SEEK_SET)
sauf que rewind efface les indicateurs de fin de fichier et d’erreur, tandis que fseek efface uniquement l’indicateur de fin de fichier. Après rewind, la prochaine opération sur un fichier de mise à jour peut être soit une entrée, soit une sortie. | |
fseek | Le pointeur de fichier pour le flux est positionné à un décalage d’un nombre d’octets calculé à partir de la position spécifiée par whence. Le décalage peut être zéro, négatif ou positif. Les symboles définis SEEK_CUR, SEEK_SET & SEEK_END sont utilisés comme spécificateurs whence pour indiquer la position actuelle. BOF & EOF respectivement. Retourne 0 si réussi ou non nul en cas d’échec. | | Syntaxe | Int fssek(FILE
stream, long offset, int whence); | | ftell
| Retourne la position actuelle du pointeur de fichier en cas de succès ou une valeur négative en cas d’erreur. | | Syntaxe | Long ftell(FILE *stream); | | feof | C’est une macro pour retourner un non zéro si la fin de fichier a été atteinte sur le flux. | | Syntaxe | Int feof(FILE *stream); | | eof | Vérifie si le marqueur de position dans le fichier donné par son handle est à la fin du fichier. Si oui, retourne 0, 1 est retourné si le marqueur de position n’est PAS à la fin du fichier & une erreur est indiquée par le réglage de errno & la valeur de retour de –1. | | Syntaxe | Int eof(int handle); | | fgets /
fputs | La fonction fgets/fputs obtient/met une chaîne (de taille n octets) sur le fichier pointé par le flux et retourne la fin de fichier en cas d’erreur. | | Syntaxe | Char fgets(char s, int n, FILE *stream); | | fgetc/fputc
Syntaxe | Lit/écrit un caractère à partir d’un flux.
Int fgetc/fputc(FILE *stream); | | fgetchar/
fputchar | Ceux-ci sont équivalents aux fgetc/fputc ci-dessus.

Écrivez un programme pour lire des données d’un étudiant et les stocker dans un fichier de données.

| | / Programme pour créer un fichier de données d’étudiant /
/ 85_write.c /
#include
#include
#include
int main()
{
int sno, sub1, sub2, sub3;
char name[10],ch;
FILE *fp = fopen(“stud.dat”, “w”);
do{
clrscr();
printf(“Entrez le numéro de l’étudiant        “); scanf(“%d”, &sno);
printf(“Entrez le nom de l’étudiant          “); scanf(“%s”, name);
printf(“Entrez les notes de 3 matières      “);
scanf(“%d%d%d”, &sub1, &sub2, &sub3);
fprintf(fp, “%d %s %d %d %d\n”, sno, name, sub1, sub2, sub3);
printf(“\n\nVoulez-vous continuer… (y/n)”); ch = getche();
}while(toupper(ch) != ‘N’);
fclose(fp);
return 0;
} |

Écrivez un programme pour récupérer des données d’un fichier de données d’étudiant.

| | / Programme pour récupérer des données d’un fichier de données d’étudiant /
/ 86_read.c /
#include
#include
int main()
{
int sno, sub1, sub2, sub3;
char name[10];
FILE *fp = fopen(“stud.dat”, “a+”);
clrscr();
printf(“Les enregistrements des étudiants sont les suivants….\n”);
do{
fscanf(fp, “%d%s%d%d%d\n”, &sno, name, &sub1, &sub2, &sub3);
printf(“%5d%15s%3d%3d%3d\n”, sno, name, sub1, sub2, sub3);
}while(!feof(fp));
fclose(fp);
return 0;
} |

Share: X/Twitter LinkedIn

Recevez de nouveaux articles dans votre boîte de réception.

Aucun spam. Désabonnez-vous à tout moment.