Vous êtes sur la page 1sur 33

Les Fichiers

Plan
 Introduction
 Déclaration
 Types de fichiers
 Ouvrir/Fermer un Fichier
 Lire/Ecrire dans un Fichier Texte
 Lire/Ecrire dans un Fichier Binaire
 Renommer un Fichier
 Supprimer un Fichier
2
Introduction
Dans beaucoup de situation, un programme a
besoin de:
 Récupérer des données stockées
(texte, nombre, image, son)
 Sauvegarder des informations
(données, résultats) pour usage
ultérieur ou usage par autres applications
Cela se fait en lisant et en écrivant dans des fichiers 3
Définition
Qu’est ce qu’un fichier?

 Données organisées dans un support de


sauvegarde (Mémoire de masse persistante)
 Peut contenir du texte, une vidéo, des
données pour des applications

4 4
Opérations
Les Opérations Standards
 Ouvrir un fichier: lui associer une variable que l'on appelle
descripteur de fichier
 Lire ou écrire des informations à partir de ce descripteur
avec des fonctions spécialement prévues pour les fichiers
 Fermer le fichier: indiquer qu'on a terminé de travailler avec
ce fichier
 Supprimer un fichier
 Renommer un fichier
5 5
Déclaration
La manipulation d’un fichier nécessite plusieurs informations
• L’adresse de la mémoire tampon où se trouve le fichier
• Le mode d’accès à ce fichier
• La position de la tête de lecture/écriture
• État d’erreur
Ces éléments sont rassemblées dans le type FILE défini dans
<stdio.h>
Un objet de type FILE* est nommé un flot de données
6 6
Ouverture d’un fichier
• Les fichiers sont ouverts avec la fonction fopen
FILE* fopen ( const char* nomf, const char* mode );
• le nom du fichier nomf est le nom classique (relatif ou absolu),
par exemple : " test.txt " ou " C:\\CoursC\\test.txt "

• Attention, en C, au caractère \ dans les chaînes de


caractère ! Écrire \\
"C:\\CoursC\\test.txt"
7
Ouverture d’un fichier

fopen nous permet d’établir un lien entre le chemin d’accès


au fichier sur le support externe renvoie un pointeur vers une
structure de type FILE

FILE * pFichier = NULL;


Exemple :
pFichier = fopen("Fiches.txt", "r");
Nom du fichier Chemin d’accès
Logique (pointeur au fichier sur Mode d’accès :
de fichier) support externe

8
Ouvrir un Fichier

Modes d’Accès à un Fichier Texte


"r" ouverture d'un fichier texte en lecture
"w" ouverture d'un fichier texte en écriture
"a" ouverture d'un fichier texte en écriture à la fin
"r+" ouverture d'un fichier texte en lecture/écriture
"w+" ouverture d'un fichier texte en lecture/écriture
"a+" ouverture d'un fichier texte en lecture/écriture à la fin
9 9
Ouvrir un Fichier
Modes d’Accès à un Fichier Binaire
"rb" ouverture d'un fichier binaire en lecture
"wb" ouverture d'un fichier binaire en écriture
"ab" ouverture d'un fichier binaire en écriture à la fin
"r+b" ouverture d'un fichier binaire en lecture/écriture
"w+b" ouverture d'un fichier binaire en lecture/écriture
ouverture d'un fichier binaire en lecture/écriture à la
"a+b"
10
fin 10
Ouvrir un Fichier
Si le mode contient la lettre r, le fichier doit
exister, sinon fopen renvoie NULL
Si le mode contient la lettre w, le fichier peut ne
pas exister. Dans ce cas, il sera créé. Si le fichier
existe déjà, son ancien contenu sera perdu
Si le mode contient la lettre a, le fichier peut ne
pas exister. Dans ce cas, il sera créé. Si le fichier
existe déjà, les nouvelles données seront ajoutées
11 à la fin du fichier précédent 11
Fermeture de Fichier
• Après les manipulations, on doit annuler la liaison
entre le fichier et le flot de données via la fonction
fclose
int fclose (pFichier);

• La fonction fclose retourne un entier qui vaut zéro


si l'opération s'est déroulée normalement (et une
valeur non nulle en cas d'erreur)
12 12
fopen/fclose : schéma
Si le fichier n'est pas ouvert correctement, inutile de continuer 
Testez systématiquement la valeur du descripteur de fichier juste
après fopen
…..
FILE * monfic;
monfic = fopen ("test.txt","r"); /* r : Read Mode */
if ( monfic == NULL ) /* test de l'ouverture */
{ printf(« ERREUR : fichier non ouvert !\n"); }
else
{ /* suite du programme (lecture à partir du fichier */
fclose (monfic);
13 }
Ecrire dans un Fichier Texte
Ecriture Formatée dans un Fichier Texte
La fonction fprintf, analogue à printf, permet d'écrire
des données dans un fichier texte à part le fait qu’on
doit indiquer le fichier en premier paramètre
int fprintf ( FILE* f, "chaîne", exp1, exp2… );
Exemple:
fprintf(monfic ," %s %s %d\n",nom, prenom, age);
14 14
créer un programme c qui
permet de stocker dans
un fichier resultat.dat, les
éléments d’un tableau de
5 cases ( initialisé à {1, 2,
3, 4, 5 } selon le modèle
suivant
15
#define N 5
void main (void)
{ int tab[N] = {1,2,3,4,5 } ;
FILE* fic ;
fic = fopen( "resultat.dat", "w");
if (fic==NULL)
{ printf("\n\n Ouverture du fichier impossible !");
exit (0); }
fprintf ( fic, "Nombre d'elements : %d", N );
for ( int i=0; i<N; i ++)
{fprintf( fic, "\n element %d : %d", i, tab[i] );}
fclose( fic ) ; /* Fermeture du fichier */
Lire depuis un Fichier Texte
Lecture Formatée dans un Fichier Texte
La fonction fscanf, analogue à scanf, permet de lire des
données dans un fichier texte
int fscanf ( FILE* f, "chaîne", arg1, arg2… );
La fonction fournit le nombre de valeurs lues ou la valeur
EOF si une erreur s’est produite ou si une fin de fichier a
été rencontrée avant qu’une valeur ait pu être lue
Exemple:
17 fscanf(monfic ," %s %s %d\n",nom, prenom, &age); 17
créer le programme qui permet de charger dans
un tableau les éléments contenus dans le fichier
resultat.dat puis les affiche à l’écran

18
FILE* fic ;
int i_lu, n, tab[5];
fic = fopen( "resultat.dat", "r") ;
if ( fic==NULL )
{ printf("\n\n Ouverture fichier impossible !"); exit(0); }
/* Lecture du fichier (feof(fic) vaut 0 (faux) si fin de fichier non atteinte) */
fscanf( fic, "Nombre d'elements : %d", &n );
for ( i=0 ; (i<n) && (!feof(fic)) ; i ++ )
fscanf( fic, "\n element %d : %d", &i_lu, &tab[i] );
/* Traitement des données lues : */
printf("\n\n Voici les valeurs lues dans le fichier :");
for ( int i=0; i<n; i ++)
printf( "\n element %d : %d", i, tab[i] );
puts("\n\n"); fclose( fic ) ;
Ecrire dans un Fichier Binaire
La fonction qui permet d’écrire des données à partir d’un
fichier binaire:
size_t fwrite (void *p, size_t taille, size_t nbre, FILE *flot);
• p : pointeur: zone de mémoire où se trouvent les éléments à écrire dans le fichier
• taille: taille en octets d'un élément
• nbre : nombre: nombre d'éléments à écrire
• flot: fichier où aura lieu l’écriture
La valeur de retour indique le nombre d'éléments effectivement écrits
Exemple: pour écrire une donnée de type Etudiant et la sauvegarder
dans le fichier f fwrite( &e, sizeof(Etudiant), 1, f);
20 20
Lire depuis un Fichier Binaire
La fonction qui permet de lire des données à partir d’un fichier binaire:
size_t fread (void *p, size_t taille, size_t nbre, FILE *flot);
• p: pointeur: zone de mémoire où sera stockée les données lus à partir du fichier
• taille: taille en octets d'un élément
• nbre : nombre: nombre d'éléments à lire
• flot: fichier où aura lieu la lecture.
La valeur de retour indique le nombre d'éléments effectivement lus
Exemple: pour lire une donnée de type Etudiant et la sauvegarder dans
21 la variable e fread( &e, sizeof(Etudiant), 1, f); 21
Exemple : Fichiers Binaires
• Soit un tableau contenant des structures à
écrire dans un fichier binaire
• La structure est définie ainsi:
typedef struct
{ char nom[20];
int jour;
int mois;
int annee;
22
} T_ANNIV; 22
Exemple 3 :Ecriture Fichier Binaire
Que va faire le programme?
• Déclarer une variable pers1 et un tableau Tpers
contenant des valeurs de type T_ANNIV;
• Initialiser le tableau;
• Ouvrir un fichier binaire en écriture
• Si l'ouverture s'est bien déroulée:
• Ecrire les éléments du tableau dans le fichier
23
• Fermer le fichier 23
#define Npers 3
void main(void)
{ T_ANNIV pers1= {"sabrine\0", 10, 3, 2000} ;
T_ANNIV Tpers[Npers]= {{"sarra",20, 2, 2005},
{"Amine",5, 6, 2010}, {"Ali",26, 5, 1955} };
FILE* fic ;
fic = fopen("anniv.bin", "wb") ;
if (fic==NULL)
{ puts("Pb d'ouverture du fichier anniv.txt !"); exit(0); }
printf("Ecriture dans un fichier binaire");
fwrite (&pers1, sizeof(T_ANNIV), 1, fic);
fwrite (Tpers, sizeof(T_ANNIV), Npers, fic);
fclose( fic ) ; }
24
Exemple 4 :Ecriture Fichier Binaire
• Lecture d'un fichier binaire pour placer les valeurs lues
dans un tableau : il faut par contre connaître à l’avance
le nombre d'éléments stockés dans le fichier ou utiliser
une boucle pour lire le fichier
• Dans l'exemple qui suit, on va reprendre le fichier créé
par l'écriture précédente et le relire
• On garde le type créé T_ANNIV, défini de la même
manière
25 25
void main(void)
{
T_ANNIV Tpers [Npers+1];
FILE* fic ;
fic = fopen("anniv.bin", "rb") ;
if (fic==NULL)
{ puts("Pb d'ouverture du fichier anniv.txt !"); exit(0); }
puts("Lecture d’un tableau à partir d'un fichier:");
fread( Tpers, sizeof(T_ANNIV), Npers+1, fic);
for (int i=0;i< (Npers+1); i++)
printf("\t%d : %-10s\t%2d/%d/%d\n", i, Tpers[i].nom,
Tpers[i].jour, Tpers[i].mois, Tpers[i].annee );
fclose (fic);
} 26 26
Exercice

27
Enregistrer les étudiants de l’atelier 1 dans un fichier

void enregistrerEtudiants(T_etud *tabEt, int nbE)


{
FILE *myFile = fopen("Etudiants.atelier", "wb");
fwrite(tabEt , sizeof(T_etud), nbE , myFile);
printf("Fichier des etudiants mis a jour\n");
fclose(myFile);
}
28
Charger les étudiants stockés dans un fichier binaire dans
un tableau

int lireTousEtudiants (T_etud *tabEt, int nbE )


{
FILE *myFile1=fopen ("Etudiants.atelier","rb");
if (myFile1 == NULL) return 0;
else
{fread(tabEt, sizeof(T_etud), nbE, myFile1);
fclose(myFile1);
return 1; }
}
29
Renommer un Fichier
La fonction rename permet de renommer un fichier
int rename ( const char* ancienNom ,
const char* nouveauNom);

La fonction renvoie 0 si elle a réussi à renommer, sinon


une valeur différente
Exemple :
rename ( "anniv.bin", "anniversaire.bin");
30 30
Supprimer un Fichier
La fonction remove permet de supprimer un
fichier
int remove (const char* fichier);

Exemple:
remove ("anniversaire.bin");
31 31
TP 2 : Atelier1_V2
Créer un version améliorée de Atelier 1 afin de permettre de:

• Lire les valeurs NbE et NbM à partir du fichier texte


« param.atelier » que vous allez créer manuellement (il contiendra
au moins les 2 valeurs correspondant au nombre d’étudiants et
nombre de matières)
• Lire la liste des étudiants à partir du fichier « Etudiants.atelier » et
la charger dans le tableau Etudiants.
• Ajouter une option dans le menu permettant d’ajouter un étudiant
(ou plus) à la liste
• Stocker la liste des étudiants après confirmation avant de quitter
dans le fichier « Etudiants.atelier » et le fichier « param.atelier »
32 sera mis à jour

Vous aimerez peut-être aussi