Académique Documents
Professionnel Documents
Culture Documents
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?
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 "
8
Ouvrir un Fichier
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
Exemple:
remove ("anniversaire.bin");
31 31
TP 2 : Atelier1_V2
Créer un version améliorée de Atelier 1 afin de permettre de: