Chapitre 1 - Fichiers
Chapitre 1 - Fichiers
Chapitre 1 - Fichiers
Chapitre I
Fichiers
Sommaire
Chapitre I : Fichier......................................................................................................4
I.1. Introduction................................................................................................................................................4
I.2. Objectifs.......................................................................................................................................................4
I.3. Définition.....................................................................................................................................................4
I.4. Éléments liés à un fichier......................................................................................................................5
a) Nom externe (nom physique)............................................................................................................5
b) Nom interne (nom logique)...............................................................................................................5
c) Tampon (Buffer)......................................................................................................................................5
d) FDF (EOF).................................................................................................................................................6
e) Indice (pointeur).....................................................................................................................................6
f) Mode d’accès............................................................................................................................................6
I.5. Manipulation des fichiers......................................................................................................................7
I.5.1. Fichiers Textes...................................................................................................................................7
I.5.1.a – Déclaration..............................................................................................................................7
I.5.1.b – Ouverture................................................................................................................................7
I.5.1.c – Fermeture................................................................................................................................9
I.5.1.d – Manipulation de fichier : lecture et écriture............................................................9
I.5.1.e – Exemples sur les fichiers textes...................................................................................10
Exemple 1 : Création d’un fichier (sans données textuelles : vide)............................10
Exemple 2 : Création d’un fichier (avec des données textuelles)...............................10
Exemple 3 : Lire un fichier texte..............................................................................................11
Exemple 4 : Modifier un fichier texte....................................................................................12
Exemple 5 : Dupliquer un fichier............................................................................................13
I.5.2. Fichiers Binaire (Structuré).......................................................................................................13
I.5.2.a – Déclaration...........................................................................................................................13
I.5.2.b – Ouverture.............................................................................................................................14
I.5.2.c – Fermeture.............................................................................................................................15
I.5.2.d – Manipulation de fichier : lecture et écriture..........................................................16
I.5.2.e – Exemples sur les fichiers binaires (Structurés).....................................................16
Exemple 1 : Création d’un fichier vide...................................................................................16
Exemple 2 : Création d’un fichier et le remplir.................................................................17
Exemple 3 : Lire un fichier binaire.........................................................................................18
Exemple 4 : Modifier un fichier binaire................................................................................19
Exemple 5 : Dupliquer un fichier...........................................................................................20
Autres Exercices............................................................................................................................21
1
ING / INF. Chapitre I : Fichiers (2022-2023)
Cours Elearning :
https://elearning.univ-bejaia.dz/course/view.php?id=2749
Page facebook :
https://www.facebook.com/InitiationAlgoProgrammation/
La chaîne Youtube :
https://www.youtube.com/@algo-prog
2
ING / INF. Chapitre I : Fichiers (2022-2023)
Chapitre I : Fichier
I.1. Introduction
Dans les programmes que nous avons réalisés durant le premier semestre, les données
sont stockées en mémoire vive (RAM), et comme vous le savez, la RAM est une mémoire
volatile et possède une capacité limitée. Alors que, les applications nécessitent une
Ainsi, nous utilisons les fichiers pour sauvegarder, d’une façon permanente, les données
d’un programme.
I.2. Objectifs
- Comprendre les concepts de base relatifs aux fichiers
- Manipuler et utiliser les fichiers (dans les algorithme et concrètement dans les
I.3. Définition
Un fichier est une structure de données logique formée de cellules contiguës permettant
l’implantation d’une suite de données physique en mémoire secondaire (Disque dur, CD-
Exemples de fichier :
- etc.
3
ING / INF. Chapitre I : Fichiers (2022-2023)
- extension du fichier
Exemples :
Extension
D:\programmes\ing\exemple01.c
(algorithme). C’est le nom logique qui doit être associé avec le nom externe (le nom
physique). Plus précisément, un nom interne (logique) est un identificateur d’une variable
c) Tampon (Buffer)
On appel tampon (buffer) d’un fichier, une zone de la mémoire central (RAM) pouvant
tampon qu’on rends les cases du visible : pour cela, on appelle le tampon fenêtre à travers
Fichier FDF
Cellules Tampon
(Enregistrements) (Fenêtre)
4
ING / INF. Chapitre I : Fichiers (2022-2023)
d) FDF (EOF)
Chaque fichier se termine par une cellule spéciale dite FDF (pour Fin de Fichier), on
anglais c’est : EOF (End Of File). Ça permet de savoir la fin de fichier lors du parcours
dess données du fichiers (voir les algorithmes et programmes) dans la suite du cours).
e) Indice (pointeur)
Pour chaque fichier, un indice (pointeur) caché, qui est géré automatiquement par le
type fichier, est utilisé pour lire ou modifier la cellule actuellement pointée par cet indice.
f) Mode d’accès
Il y a deux types de fichiers, en terme de mode d’accès, à savoir :
tous les (n-1) cellules précédentes. (Souvent, ce sont les fichiers textes)
- Fichiers à accès direct : Dans ce cas, on peut accéder directement à une cellule
Remarque :
illimité).
- Les caractéristiques des fichiers sont étroitement liées aux langages de programmation,
et puisque le langage étudié pour vous est le langage C, nous allons se focalisé sur les type
Dans les sections qui suivent, nous allons voir, techniquement, comment manipuler les
fichiers en algorithmique et la programmation (en langage C). Par la suite, nous allons
5
ING / INF. Chapitre I : Fichiers (2022-2023)
- Déclarer un fichier,
I.5.1.a – Déclaration
Un fichier texte est une fichier de caractères (c’est à dire que le buffer est un caractère
Algorithmique Langage C
Algorithme Exemple; #include <stdio.h>
#include <stdlib.h>
Variables
f : fichier de caractères; int main()
{
Début FILE* f; //Déclaration d’un fichier f (pointeur)
<instruction(s)>;
Fin. <Instruction(s)>;
}
Dans la partie déclaration, on définit le nom interne du fichier (le nom logique).
I.5.1.b – Ouverture
Pour lire ou écrire dans un fichier, il faut tout d’abord l’ouvrir. En algorithmique, il y a
6
ING / INF. Chapitre I : Fichiers (2022-2023)
- Ouverture en écriture (E) : Si le fichier n’existe pas, il sera créé. Sinon, il sera
- Ouverture en ajout (A) (lecture / écriture) : si le fichier n’existe pas, il sera crée,
L’ouverture d’un fichier se fait en utilisant la fonction Ouvrir qui possède deux
paramètres :
Cette fonction retourne une variable qui permet d’accéder au fichier : le nom interne du
Algorithmique Langage C
<nom_fichier> = Ouvrir ("nom_externe", <mode>); <nom_fichier> = fopen("nom_externe", <mode>) ;
Tel-que :
Par exemple :
Algorithmique Langage C
Algorithme Exemple; #include <stdio.h>
7
ING / INF. Chapitre I : Fichiers (2022-2023)
I.5.1.c – Fermeture
Après avoir manipuler un fichier, il faut toujours le fermer. La syntaxe de fermeture
Algorithmique Langage C
fermer(<nom_fichier>); fclose(<nom_fichier>);
Tel-que :
Par exemple :
Algorithmique Langage C
Algorithme Exemple; #include <stdio.h>
caractères ou des valeurs numériques (entiers ou réels). On peut aussi lire le contenu d’un
fichier texte avec un format déterminé : caractère, chaîne de caractères ou des valeurs
8
ING / INF. Chapitre I : Fichiers (2022-2023)
Algorithmique Langage C
écrire(<nom_fichier>, <p1>, <p2>, …); fprintf(<nom_fichier>, <ccf>, <p1>, <p2>, …);
Lire(<nom_fichier>, <p1>, <p2>, …); fscanf(<nom_fichier>, <ccf>, &<p1>, &<p2>, …);
Tel-que :
données textuelles).
Algorithmique # Langage C
Algorithme Exemple01_Creer_Fichier; 01 #include <stdio.h>
02
Variables 03 int main()
f : fichier de caractères; 04 {
05 FILE* f; //Déclaration d’un fichier f (pointeur)
Début 06 f = fopen("exemple_fichier_01.txt", "w");
f ← Ouvrir(" Ouvrir("exemple_fichier_01.txt", ‘E’); 07
08 fclose(f);
Fermer(f); 09 return 0;
Fin. 10 }
L’exemple ci-dessus est accessible via le lien :
https://www.dropbox.com/s/y1cpjc91lba2j28/exemple01.c?dl=0
Il faut ajouter une variable tampon (soit caractère ou bien (mieux) chaîne de caractère).
On veut écrire du texte avec le clavier et le saisir dans le fichier texte, on répète l’opération
9
ING / INF. Chapitre I : Fichiers (2022-2023)
Algorithmique # Langage C
Algorithme Exemple02_Remplir_Fichier; 01 #include <stdio.h>
02 #include <string.h>
Variables 03
f : fichier de caractères; 04 int main()
x : chaîne_caractères; 05 {
Début 06 FILE* f; //Déclaration d’un fichier f (pointeur)
f ← Ouvrir(" Ouvrir("exemple_fichier_01.txt", ‘E’); 07 char x[255];
08 f = fopen("exemple_fichier_01.txt", "w");
Lire(x); //Introduire x par clavier ... 09
Tant-que (x <> ‘end’) faire 10 scanf("%s", x);
écrire(f, x); //écrire la valeur de x dans f 11 while ( strcmp(x, "end") != 0)
Lire(x); //Introduire x par clavier ... 12 {
Fin-Tantque; 13 fprintf(f, "%s\n", x);
14 scanf("%s", x);
Fermer(f); 15 }
Fin. 16
17 fclose(f);
18 return 0;
19 }
Le programme est disponible sur les liens suivants :
version 01 : https://www.dropbox.com/s/z293jgn2egpgu64/exemple02_v01.c?dl=0
version 02 : https://www.dropbox.com/s/w8oquzd8ccsjemd/exemple02_v02.c?dl=0
Remarque :
Avec l’ouverture le mode « Écriture », le fichier sera créé ou écrasé, il faut faire
Dans cet exemple, nous allons voir comment lire le contenu du fichier créé
Algorithmique # Langage C
Algorithme Exemple03_Lire_Fichier; 01 #include <stdio.h>
02 #include <string.h>
Variables 03
f : fichier de caractères; 04 int main()
x : caractere; 05 {
Début 06 FILE* f; //Déclaration d’un fichier f (pointeur)
f ← Ouvrir(" Ouvrir("exemple_fichier_01.txt", ‘L’); 07 char x;
10
ING / INF. Chapitre I : Fichiers (2022-2023)
08 f = fopen("exemple_fichier_01.txt", "r");
Tant-que ( Non(FDF(f)) ) faire 09
Lire(f, x); //lire un caractère de fihcier f 10 while (!feof(f) )
Écrire(x); //Afficher x sur l’écran 11 {
Fin-Tantque; 12 fscanf(f, "%c", &x); //Lire un caractère
13 printf("%c", x);
Fermer(f); 14 }
Fin. 15
16 fclose(f);
17 return 0;
18 }
Le programme est disponible sur les liens suivants :
https://www.dropbox.com/s/p2k5739vwhu7jdu/exemple03.c?dl=0
Algorithmique # Langage C
Algorithme Exemple04_Modifier_fichier; 01 #include <stdio.h>
02 #include <string.h>
Variables 03
f : fichier de caractères; 04 int main()
x : chaîne_caractères; 05 {
Début 06 FILE* f; //Déclaration d’un fichier f (pointeur)
f ← Ouvrir(" Ouvrir("exemple_fichier_01.txt", ‘A’); 07 char x[255];
08 f = fopen("exemple_fichier_01.txt", "a");
Lire(x); //Introduire x par clavier ... 09
Tant-que (x <> ‘end’) faire 10 scanf("%s", x);
écrire(f, x); //écrire la valeur de x dans f 11 while ( strcmp(x, "end") != 0)
Lire(x); //Introduire x par clavier ... 12 {
Fin-Tantque; 13 fprintf(f, "%s\n", x);
14 scanf("%s", x);
Fermer(f); 15 }
Fin. 16
17 fclose(f);
18 return 0;
19 }
Le programme est disponible sur les liens suivants :
Version 01: https://www.dropbox.com/s/iwxihtbxd88vdp5/exemple04_v01.c?dl=0
Version 02: https://www.dropbox.com/s/982so9w6zzll0zh/exemple04_v02.c?dl=0
11
ING / INF. Chapitre I : Fichiers (2022-2023)
Algorithmique # Langage C
Algorithme Exemple05_Copier; 01 #include <stdio.h>
02 #include <string.h>
Variables 03
f1, f2 : fichier de caractères; 04 int main()
x : caractere; 05 {
Début 06 FILE *f1, *f2;
f1 ← Ouvrir(" Ouvrir("exemple_fichier_01.txt", ‘L’); 07 char x;
f2 ← Ouvrir(" Ouvrir("exemple_fichier_02.txt", ‘E’); 08 f1 = fopen("exemple_fichier_01.txt", "r");
09 f2 = fopen("exemple_fichier_02.txt", "w");
Tant-que ( Non(FDF(f)) ) faire 10 while (!feof(f) )
Lire(f1, x); //lire un caractère de fihcier f1 11 {
Écrire(f2, x); //écrire x dans f2 12 fscanf(f1, "%c", &x); //Lire un caractère
Fin-Tantque; 13 fprintf(f2, "%c", x); //écrire un caractère
14 }
Fermer(f1); 15
Fermer(f2); 16 fclose(f1);
Fin. 17 fclose(f2);
18 return 0;
19 }
Le programme est disponible sur les liens suivants :
https://www.dropbox.com/s/68rn9oqq403vrsm/exemple05.c?dl=0
Remarques :
- Pour supprimer un fichier en langage C, il suffit d’utiliser la fonction remove :
int remove( const char * fileName );
I.5.2.a – Déclaration
Un fichier binaire est déclaré comme suit :
12
ING / INF. Chapitre I : Fichiers (2022-2023)
Algorithmique Langage C
Algorithme Exemple; #include <stdio.h>
Type #include <stdlib.h>
<Type_Enregistrement> = Enregistrement
<champ_1>:<type_champ_1>; typedef struct {
<champ_2>:<type_champ_2>; <type_champ_1> <champ_1>;
…. <type_champ_2> <champ_2>;
<champ_n>:<type_champ_n>; ….
Fin; <type_champ_n> <champ_n>;
} <Type_Enregistrement>;
Variables
f : fichier de <Type_Enregistrement>; int main()
x : <Type_Enregistrement>;//Tampon ... {
FILE* f; //Déclaration d’un fichier f (pointeur)
Début <Type_Enregistrement> x; //Buffer ...
<instruction(s)>;
Fin. <Instruction(s)>;
}
En langage C, pour la variable fichier (le nom logique), il n y a pas une différence entre
les fichiers textes et les fichiers binaires. La différence sera explicite au niveau de
l’ouverture de fichier.
I.5.2.b – Ouverture
Comme les fichiers textes, les fichier binaire possède trois modes d’ouverture : E, L et A.
Et l’ouverture d’un fichier se fait en utilisant la fonction Ouvrir qui possède deux
Algorithmique Langage C
<nom_fichier> = Ouvrir ("nom_externe", <mode>); <nom_fichier> = fopen("nom_externe", <mode>) ;
Tel-que :
respectivement.
13
ING / INF. Chapitre I : Fichiers (2022-2023)
Par exemple :
Algorithmique Langage C
Algorithme Exemple; #include <stdio.h>
Type //Déclarer un type <Type_Enregistrement> typedef//Déclarer un type <Type_Enregistrement>
Variables int main()
f : fichier de <Type_Enregsitrement>; {
FILE* f; //Déclaration d’un fichier f (pointeur)
Début f = fopen("fichier01.bin", "wb");
f ← Ouvrir(" Ouvrir("fichier01.bin", ‘E’);
<Suite_Instruction(s)>;
<suite_instruction(s)>; return 0;
Fin. }
I.5.2.c – Fermeture
Identique aux fichiers textes :
Algorithmique Langage C
fermer(<nom_fichier>); fclose(<nom_fichier>);
Par exemple :
Algorithmique Langage C
Algorithme Exemple; #include <stdio.h>
Type //Déclarer un type <Type_Enregistrement> typedef//Déclarer un type <Type_Enregistrement>
Variables int main()
f : fichier de <Type_Enregsitrement>; {
FILE* f; //Déclaration d’un fichier f (pointeur)
Début f = fopen("fichier01.txt", "wb");
f ← Ouvrir(" Ouvrir("fichier01.bin", ‘E’); //Manipuler le fichier (lecture et/ou écriture)
//Manipuler le fichier (écriture et/ou lecture) fclose(f);
Fermer(f); return 0;
Fin. }
14
ING / INF. Chapitre I : Fichiers (2022-2023)
Algorithmique Langage C
écrire(<nom_fichier>, <p1>, <p2>, …); fwrite(<adr_tampon>, <tb>, <nb>, <nom_fichier>);
Lire(<nom_fichier>, <p1>, <p2>, …); fread(<adr_tampon>, <tb>, <nb>, <nom_fichier>);
Tel-que :
Pour le C :
produit. Un produit est défini par une référence, désignation, couleur, prix unitaire et
quantité en stock.
Algorithmique # Langage C
Algorithme Exemple01_Creer_Fichier; 01 #include <stdio.h>
Type 02 typedef struct {
Tproduit = Enregistrement 03 char reference[20];
reference : Chaîne_Caracters[20]; 04 char designation[100];
designation : Chaîne_Caracters[100]; 05 char couleur[15];
couleur : Chaîne_Caracters[15]; 06 float prix_unitaire;
prix_unitaire : réel; 07 int qte_stock;
qte_stock : entier; 08 } Tproduit;
Fin; 09
10 int main()
Variables 11 {
15
ING / INF. Chapitre I : Fichiers (2022-2023)
Algorithmique # Langage C
Algorithme Exemple02_Creer_Fichier; 01 #include <stdio.h>
Type 02 typedef struct {
TProduit = Enregistrement 03 char reference[20];
reference : Chaîne_Caracters[20]; 04 char designation[100];
designation : Chaîne_Caracters[100]; 05 char couleur[15];
couleur : Chaîne_Caracters[15]; 06 float prix_unitaire;
prix_unitaire : réel; 07 int qte_stock;
qte_stock : entier; 08 } TProduit;
Fin; 09
10 int main()
Variables 11 {
f : fichier de TProduit; 12 FILE* f; //Déclaration d’un fichier f (pointeur)
x : TProduit; choix, n : entier; 13 TProduit x; int choix, n;
Début 14
f ← Ouvrir(" Ouvrir(‘produits.dat’, ‘E’); 15 f = fopen("produits.dat", "wb");
n ← Ouvrir(" 0; 16
répéter 17 //Pour le programme, voir le lien ci-dessous
n ← Ouvrir(" n+1; ...
écrire(‘Enregistrement N°’, n, ‘ : ‘); 77 fclose(f);
écrire(‘ Référence : ’); 78
Lire(x.reference); 79 return 0;
écrire(‘ Désignation : ’); 80 }
Lire(x.designation);
écrire(‘ Couleur : ’);
Lire(x.couleur);
écrire(‘ Prix unitaire : ’);
Lire(x.prix_unitaire);
16
ING / INF. Chapitre I : Fichiers (2022-2023)
écrire(f, x);
Fermer(f);
Fin.
Le programme est disponible sur les liens suivants :
https://www.dropbox.com/s/1ef2y3473r1m47m/exemple07.c?dl=0
Remarque :
Avec l’ouverture le mode « Écriture », le fichier sera créé ou écrasé, il faut faire
Dans cet exemple, nous allons voir comment lire le contenu du fichier créé
Algorithmique # Langage C
Algorithme Exemple03_Lire_Fichier; 01 #include <stdio.h>
Type 02 typedef struct {
TProduit = Enregistrement 03 char reference[20];
reference : Chaîne_Caracters[20]; 04 char designation[100];
designation : Chaîne_Caracters[100]; 05 char couleur[15];
couleur : Chaîne_Caracters[15]; 06 float prix_unitaire;
prix_unitaire : réel; 07 int qte_stock;
qte_stock : entier; 08 } TProduit;
Fin; 09
10 int main()
Variables 11 {
f : fichier de TProduit; 12 FILE* f; //Déclaration d’un fichier f (pointeur)
x : TProduit; choix, n : entier; 13 TProduit x; int choix, n;
Début 14
f ← Ouvrir(" Ouvrir(‘produits.dat’, ‘L’); 15 f = fopen("produits.dat", "rb");
17
ING / INF. Chapitre I : Fichiers (2022-2023)
n ← Ouvrir(" 0; 16
Tant-que (Non(FDF(f))) faire 17 n = 0;
n ← Ouvrir(" n+1; 18 while (!feof(f))
Lire(f, x); 19 {
20 n++;
écrire(‘Enregistrement N°’, n, ‘ : ‘); 21 fread(&x, sizeof(TProduit), 1, f);
écrire(‘ Référence : ’, x.reference); 22
écrire(‘ Désignation : ’, x.reference); 23 printf("Enregistrement N° %d : \n", n);
écrire(‘ Couleur : ’, x.reference); 24 printf(" Reference : %s\n", x.reference);
écrire(‘ Prix unitaire : ’, x.reference); 25 printf(" Designation : %s\n", x.designation);
écrire(‘ Qte Stock : ’, x.reference); 26 printf(" Couleur : %s\n", x.couleur);
Fin-Tant-que; 27 printf(" Prix unitaire : %.2f\n", x.prix_unitaire);
28 printf(" Qte Stock : %d\n", x.qte_stock);
écrire(‘Vous avez affiché’, n, ‘ objects’) ; 29 printf("\n");
30 }
Fermer(f); 31
Fin. 32 printf("Vous avez affiché %d enregistrements
.→ (Produits).", n);
33
34 return 0;
35 }
Le programme est disponible sur les liens suivants :
https://www.dropbox.com/s/zomz6vzkjv9jp8p/exemple08.c?dl=0
fichier produits.dat : https://www.dropbox.com/s/e47o6ue5vh82y3r/produits.dat?dl=0
Algorithmique # Langage C
Algorithme Exemple04_Modifier_Fichier; 01 #include <stdio.h>
Type 02 typedef struct {
TProduit = Enregistrement 03 char reference[20];
reference : Chaîne_Caracters[20]; 04 char designation[100];
designation : Chaîne_Caracters[100]; 05 char couleur[15];
couleur : Chaîne_Caracters[15]; 06 float prix_unitaire;
prix_unitaire : réel; 07 int qte_stock;
qte_stock : entier; 08 } TProduit;
Fin; 09
10 int main()
Variables 11 {
f : fichier de TProduit; 12 FILE* f; //Déclaration d’un fichier f (pointeur)
x : TProduit; choix, n : entier; 13 TProduit x; int choix, n;
Début 14
18
ING / INF. Chapitre I : Fichiers (2022-2023)
écrire(f, x);
Fermer(f);
Fin.
Le programme est disponible sur les liens suivants :
https://www.dropbox.com/s/k93paf89805z7tl/exemple09.c?dl=0
fichier produits.dat : https://www.dropbox.com/s/e47o6ue5vh82y3r/produits.dat?dl=0
Dans cet exemple, nous allons comment dupliquer un fichier dans un nouveau fichier :
Algorithmique # Langage C
Algorithme Exemple05_Dupliquer_fichier; 01 #include <stdio.h>
Type 02 typedef struct {
TProduit = Enregistrement 03 char reference[20];
reference : Chaîne_Caracters[20]; 04 char designation[100];
designation : Chaîne_Caracters[100]; 05 char couleur[15];
couleur : Chaîne_Caracters[15]; 06 float prix_unitaire;
19
ING / INF. Chapitre I : Fichiers (2022-2023)
Remarques :
- Avec les fichiers binaires, on peut positionner le pointeur du fichier (l’indice caché) sur
une cellule (enregistrement) en donnant son indice ( 0 ≤ indice < Nombre indice < Nombre
Algorithmique Langage C
positionner(f, 2); fseek(f, 2*sizeof(TProduit), SEEK_SET);
dans un fichier, voir le programme suit (le deuxième paramètre de fseek est en octets) :
https://www.dropbox.com/s/hewynwen2myfrcx/exemple11.c?dl=0
20
ING / INF. Chapitre I : Fichiers (2022-2023)
Autres Exercices
1) Soit produits.dat fichier de produits créé précédemment. Écrire un algorithme /
n-1)
jusqu’à n).
21