SlideShare une entreprise Scribd logo
1  sur  29
www.esprit.ens.tn
Se former autrement
pour une nouvelle génération d’ingénieurs
Programmation Procédurale 2
Equipe Algorithmique
2017 / 2018
La manipulation des fichiers en C
2
Plan:
 Qu'est-ce qu'un fichier ?
 Utilité
 Déclaration
 Les types de fichiers
 Ouverture/Fermeture
 Lecture/écriture dans fichier texte
 Lecture /écriture dans un fichier binaire
La manipulation des fichiers en c
3
Qu'est-ce qu'un fichier ?
 Données organisées, support de sauvegarde (disquette,
disque dur, CD/DVD)
peut contenir du texte, de la vidéo, des données pour des
applications.
Mémoire de masse persistante (pas effacée quand hors-
tension)
4
Utilité
 Les variables d’un programme C sont créées dans la
mémoire vive
 Une fois le programme est arrêté, ces variables sont
supprimées de la mémoire et il devient impossible
d’accéder à leurs valeurs.
 Pour sauvegarder ces variables sur le disque dur, on
utilise les fichiers.
5
Manipulation de fichiers
Opérations standard à mener pour travailler avec un fichier :
Ouvrir un fichier : lui associer une variable que l'on appelle
descripteur de fichier : permettra l'accès au fichier.
Lire ou écrire des informations à partir de ce descripteur avec
des fonctions spécialement prévues pour les fichiers.
Fermer le fichier : indiquer que l'on a terminé de travailler avec
ce fichier
6
 Déclaration:
Pour manipuler un fichier on a besoin d’un certain nombre
d’informations comme:
 Le mode d’accès à ce fichier
 L’adresse de la mémoire tampon où se trouve le fichier
 La position de la tête de lecture/écriture
 État d’erreur…
Toutes ces informations sont rassemblées dans le type FILE
Ce type est défini dans le fichier <stdio.h>
Un objet de type FILE* est nommé un flot de données
Déclaration
7
Les fichiers textes
Un fichier texte est un fichier dont le contenu représente
une suite de caractères lisibles.
Les types de fichiers
8
Les fichiers binaires:
Tout fichier qui n’est pas de type texte est un fichier binaire
Dans un fichier texte, on enregistre des textes.
Dans un fichier binaire, on peut enregistrer des données complexes.
Les types de fichiers
9
 Ouverture:
 Pour pouvoir lire et écrire dans un fichier il faut commencer par ouvrir ce
fichier.
 Syntaxe: f=fopen("chemin", "mode");
 La fonction fopen ouvre un fichier et lui associe un flot de donnée.
 Si l'exécution de cette fonction ne se déroule pas normalement, elle retourne
une valeur NULL Il est donc recommandé de faire un test
- f est une variable de type FILE*
- Le premier paramètre est le chemin d’accès au fichier:
exemple: "monFich.txt" , " C:mondossiermonFich.txt "
- Le deuxième paramètre est une chaine de caractère spécifiant le mode
d’accès .
Ouverture/fermeture d’un fichier
10
Ouverture/fermeture d’un fichier
 Les 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
11
Ouverture/fermeture d’un fichier
 Les 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
"a+b" ouverture d'un fichier binaire en lecture/écriture à la fin
12
Si le mode contient la lettre r, le fichier doit exister.
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 à
la fin du fichier précédent.
Ouverture /fermeture d’un fichier
13
 Fermeture d’un fichier:
 Après les manipulations, on doit annuler la liaison entre le
fichier et le flot de donnée via la fonction fclose :
fclose(f);
 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).
Ouverture/fermeture d’un fichier
14
Lecture/écriture dans fichier texte
15
 Ecriture formatée dans un fichier texte:
 La fonction fprintf, analogue à printf, permet d'écrire des données dans
un fichier texte. Syntaxe:
int fprintf(f,"chaîne de contrôle",expression-1, ..., expression-n);
 la valeur de retour indique le nombre de caractères écrits
Exemple:
fprintf(f, " %s %s %dn",nom, prenom, age);
Remarques:
 Un 'n' écrit dans un fichier provoquera un passage à la ligne
 le caractère de fin de fichier est ajouté automatiquement, pas besoin de le mettre.
Lecture/écriture dans fichier texte
16
 Lecture formatée dans un fichier texte:
 La fonction fscanf, analogue à scanf, permet de lire des données dans un fichier
texte.
 Syntaxe:
int fscanf(f,"chaîne de contrôle",argument-1, ..., argument-n);
fscanf fournit le nombre de valeurs lues convenablement ou la valeur EOF si une
erreur s’est produite ou si une fin de fichier a été rencontrée avant qu’une seule
valeur ait pu être lue.
 Exemple:
fscanf(f, " %s %s %dn",nom, prenom, &age);
Lecture/écriture dans fichier texte
17
 Impression et lecture d’un caractère:
 La fonction fgetc, analogue à getchar, permet de lire un caractère
dans un fichier texte. Syntaxe:
c = fgetc(f);
Cette fonction dont le type de retour est int, retourne le caractère
lu dans le fichier. Elle retourne la constante EOF (End-Of-
File) lorsqu'elle détecte la fin du fichier.
Lecture/écriture dans fichier texte
18
 Impression et lecture d’un caractère:
 La fonction fputc, analogue à putchar, permet d’écrire un caractère
dans un fichier texte. Syntaxe:
fputc(c,f);
Où c est une variable de type char .
Lecture/écriture dans fichier texte
19
 Lecture /écriture par ligne dans un fichier texte: fgets
 La fonction fgets, analogue à gets, permet de lire toute une ligne dans un
fichier texte. Syntaxe:
fgets(chaine,taille,f);
Où:
-chaîne est de type pointeur vers char et doit pointer vers un tableau de
caractères.
-taille est la taille en octets du tableau de caractères pointé par chaîne.
La fonction fgets rend le pointeur chaîne en cas de lecture sans erreur,
ou NULL dans le cas de fin de fichier ou d'erreur.
En cas de fin de fichier ou erreur, fgets rend NULL et non pas EOF!
Lecture/écriture dans un fichier texte:
20
 Lecture /écriture par ligne dans un fichier texte:fputs
 La fonction fputs, analogue à puts, permet d’écrire toute une ligne
dans un fichier texte. Syntaxe:
fputs(chaine,f);
Où:
-chaîne est de type pointeur vers char et pointe vers un tableau de
caractères.
La fonction fputs rend une valeur non négative si l'écriture se passe
sans erreur, et EOF en cas d'erreur.
Lecture/écriture dans fichier binaire
21
 Les entrées/sorties binaires:
 Ces entrées/sorties sont plus efficaces que les entrées
sortie standard car les données sont transférées sans
transcodage.
 Inconvénient: Ces fichiers ne sont pas portables car le
codage dépend de la machine.
Lecture/écriture dans fichier binaire
22
 La lecture depuis un fichier binaire:
 La fonction qui permet de lire des données à partir d’un fichier binaire:
size_t fread (void *pointeur, size_t taille, size_t nombre, FILE *flot);
• pointeur : zone de mémoire où se trouvent les éléments à écrire dans le fichier
• taille : taille en octets d'un élément
• 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 la variable e:
fread( &e, sizeof(Etudiant), 1, f);
Lecture/écriture dans fichier binaire
23
 L’écriture dans un fichier binaire:
 La fonction qui permet de sauvegarder des données dans un fichier binaire:
size_t fwrite(void *pointeur, size_t taille, size_t nombre, FILE *flot);
• pointeur : zone de mémoire où se trouvent les éléments à écrire dans le fichier
• taille : taille en octets d'un élément
• 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 e et la sauvegarder dans le fichier f
fwrite( &e, sizeof(Etudiant), 1, f);
Exemple de programmes utilisant des fichiers binaires : utiliser la similitude entre
tableaux et fichiers binaires .
Premier programme : tableau contenant des struct, à écrire dans un fichier binaire.
La structure est définie ainsi :
typedef struct s_complex
{
float re;
float im;
}t_complex;
Fichiers binaires et tableaux
Que va faire le programme ?
Déclarer un tableau contenant des valeurs de type t_complex;
Initialiser le tableau;
ouvrir un fichier binaire en écriture
si l'ouverture s'est bien déroulée
écrire les éléments du tableau dans le fichier
fermer le fichier
Fichiers binaires et tableaux
#include <stdio.h>
/* définition du type complex */
void main()
{
t_complex tabc[3]={{1.0,1.0},{2.0,3.0},{3.0,-1.0}};
FILE *ficbin;
ficbin=fopen("comp.bin", "wb"));
if ((ficbin != NULL)
{
fwrite(tabc,sizeof(t_complex),1,ficbin);
fwrite(tabc+1,sizeof(t_complex),1,ficbin);
fwrite(tabc+2,sizeof(t_complex),1,ficbin);
fclose(ficbin);
}
}
où remplacer les 3fwrite par un seul :
fwrite(tabc,sizeof(t_complex),3,ficbin);
Fichiers binaires et tableaux
Lecture d'un fichier binaire pour placer les valeurs lues dans un
tableau : il faut par contre connaître par 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_complex, défini de la même manière.
Programme très ressemblant, on utilisera fread à la place de
fwrite !
Fichiers binaires et tableaux
#include <stdio.h>
/* définition du type complex */
void main()
{
t_complex tabc[3]; /* non initialisé, on va lire */
FILE *ficbin;
ficbin=fopen("comp.bin","rb"));
if ((ficbin!= NULL)
{
fread(tabc,sizeof(t_complex),3,ficbin);
fclose(ficbin);
}
}
Fichiers binaires et tableaux
Fin du fichier
29
 La fin du fichier est marquée par un caractère spécial (CTRL-Z) de fin de
fichier. Cette fin de fichier est aussi nommée EOF (End Of File).
Fin du fichier repéré grâce à l'emploi de la fonction feof :
prototype :
int feof(FILE* fic);
indique si on est à la fin du fichier si la valeur de retour est différentes de 0,
sinon la valeur de retour est nulle.

Contenu connexe

Similaire à Manipulation des fichiers en C.pptx

Formation Informatique base et généralités
Formation Informatique base et généralitésFormation Informatique base et généralités
Formation Informatique base et généralitésSinovatia
 
Résumer sur les fichier et les enregistrement
Résumer sur les fichier et les enregistrementRésumer sur les fichier et les enregistrement
Résumer sur les fichier et les enregistrementborhen boukthir
 
Le système d&rsquo;E/S en Java
Le système d&rsquo;E/S en JavaLe système d&rsquo;E/S en Java
Le système d&rsquo;E/S en JavaKorteby Farouk
 
Entrees sorties
Entrees sortiesEntrees sorties
Entrees sortiesyazidds2
 
Chap3 Communication Inter Processus.pptx
Chap3 Communication Inter Processus.pptxChap3 Communication Inter Processus.pptx
Chap3 Communication Inter Processus.pptxZohraQassimi
 
Scripting Linux avec Python partie1.pptx
Scripting Linux avec Python partie1.pptxScripting Linux avec Python partie1.pptx
Scripting Linux avec Python partie1.pptxFrancisRUKAN
 
Gestion d'E_S - Sérialisation.pdf
Gestion d'E_S - Sérialisation.pdfGestion d'E_S - Sérialisation.pdf
Gestion d'E_S - Sérialisation.pdfMadaniAhlem2
 
Les instructions simples en pascal p1
Les instructions simples en pascal p1Les instructions simples en pascal p1
Les instructions simples en pascal p1دليل الحياة
 
Découvrez OpenRefine: un outil gratuit pour nettoyer, préparer et enrichir vo...
Découvrez OpenRefine: un outil gratuit pour nettoyer, préparer et enrichir vo...Découvrez OpenRefine: un outil gratuit pour nettoyer, préparer et enrichir vo...
Découvrez OpenRefine: un outil gratuit pour nettoyer, préparer et enrichir vo...Mathieu Saby
 
log file sous Netbeans et J2ME
log file sous Netbeans et J2MElog file sous Netbeans et J2ME
log file sous Netbeans et J2MEZied
 
01 - Introduction à Python chaines de caractères.pdf
01 - Introduction à Python chaines de caractères.pdf01 - Introduction à Python chaines de caractères.pdf
01 - Introduction à Python chaines de caractères.pdfMARYAM510573
 
programmation_shell_2022 (1).pptx
programmation_shell_2022 (1).pptxprogrammation_shell_2022 (1).pptx
programmation_shell_2022 (1).pptxManalAg
 
Cours d’approfondissement de LaTeX (intermédiaire-avancé)
Cours d’approfondissement de LaTeX (intermédiaire-avancé)Cours d’approfondissement de LaTeX (intermédiaire-avancé)
Cours d’approfondissement de LaTeX (intermédiaire-avancé)Adrien Barbaresi
 

Similaire à Manipulation des fichiers en C.pptx (20)

Tp n 3 linux
Tp n 3 linuxTp n 3 linux
Tp n 3 linux
 
Rapport Projet Module Complexité
Rapport Projet Module ComplexitéRapport Projet Module Complexité
Rapport Projet Module Complexité
 
Formation Informatique base et généralités
Formation Informatique base et généralitésFormation Informatique base et généralités
Formation Informatique base et généralités
 
Résumer sur les fichier et les enregistrement
Résumer sur les fichier et les enregistrementRésumer sur les fichier et les enregistrement
Résumer sur les fichier et les enregistrement
 
Le système d&rsquo;E/S en Java
Le système d&rsquo;E/S en JavaLe système d&rsquo;E/S en Java
Le système d&rsquo;E/S en Java
 
Entrees sorties
Entrees sortiesEntrees sorties
Entrees sorties
 
JAVA-IO.pdf
JAVA-IO.pdfJAVA-IO.pdf
JAVA-IO.pdf
 
JAVA-IO.pdf
JAVA-IO.pdfJAVA-IO.pdf
JAVA-IO.pdf
 
Chap3 Communication Inter Processus.pptx
Chap3 Communication Inter Processus.pptxChap3 Communication Inter Processus.pptx
Chap3 Communication Inter Processus.pptx
 
Scripting Linux avec Python partie1.pptx
Scripting Linux avec Python partie1.pptxScripting Linux avec Python partie1.pptx
Scripting Linux avec Python partie1.pptx
 
Gestion d'E_S - Sérialisation.pdf
Gestion d'E_S - Sérialisation.pdfGestion d'E_S - Sérialisation.pdf
Gestion d'E_S - Sérialisation.pdf
 
Les instructions simples en pascal p1
Les instructions simples en pascal p1Les instructions simples en pascal p1
Les instructions simples en pascal p1
 
Découvrez OpenRefine: un outil gratuit pour nettoyer, préparer et enrichir vo...
Découvrez OpenRefine: un outil gratuit pour nettoyer, préparer et enrichir vo...Découvrez OpenRefine: un outil gratuit pour nettoyer, préparer et enrichir vo...
Découvrez OpenRefine: un outil gratuit pour nettoyer, préparer et enrichir vo...
 
Fascicule tp programmation c
Fascicule tp programmation cFascicule tp programmation c
Fascicule tp programmation c
 
Tubes.pdf
Tubes.pdfTubes.pdf
Tubes.pdf
 
Langage C
Langage CLangage C
Langage C
 
log file sous Netbeans et J2ME
log file sous Netbeans et J2MElog file sous Netbeans et J2ME
log file sous Netbeans et J2ME
 
01 - Introduction à Python chaines de caractères.pdf
01 - Introduction à Python chaines de caractères.pdf01 - Introduction à Python chaines de caractères.pdf
01 - Introduction à Python chaines de caractères.pdf
 
programmation_shell_2022 (1).pptx
programmation_shell_2022 (1).pptxprogrammation_shell_2022 (1).pptx
programmation_shell_2022 (1).pptx
 
Cours d’approfondissement de LaTeX (intermédiaire-avancé)
Cours d’approfondissement de LaTeX (intermédiaire-avancé)Cours d’approfondissement de LaTeX (intermédiaire-avancé)
Cours d’approfondissement de LaTeX (intermédiaire-avancé)
 

Plus de olfaharrabi2

AI.Harshini,Norah,Bhavika-2 (1).pdf presentation
AI.Harshini,Norah,Bhavika-2 (1).pdf presentationAI.Harshini,Norah,Bhavika-2 (1).pdf presentation
AI.Harshini,Norah,Bhavika-2 (1).pdf presentationolfaharrabi2
 
Ethics de lintelligence artificielle dans le domaine de business
Ethics de lintelligence artificielle dans le domaine de businessEthics de lintelligence artificielle dans le domaine de business
Ethics de lintelligence artificielle dans le domaine de businessolfaharrabi2
 
artificial intelligence and applications
artificial intelligence and applicationsartificial intelligence and applications
artificial intelligence and applicationsolfaharrabi2
 
Chap 1 Initiation.pptx
Chap 1 Initiation.pptxChap 1 Initiation.pptx
Chap 1 Initiation.pptxolfaharrabi2
 
intro final html.docx
intro final html.docxintro final html.docx
intro final html.docxolfaharrabi2
 
Présentation1.pptx
Présentation1.pptxPrésentation1.pptx
Présentation1.pptxolfaharrabi2
 
Introduction to ORoperationresearch UTC.pdf
Introduction to ORoperationresearch UTC.pdfIntroduction to ORoperationresearch UTC.pdf
Introduction to ORoperationresearch UTC.pdfolfaharrabi2
 
Cours AA S2 Ch4+5.ppt
Cours AA S2 Ch4+5.pptCours AA S2 Ch4+5.ppt
Cours AA S2 Ch4+5.pptolfaharrabi2
 
chapitre 1 programmation linéaire.pdf
chapitre 1 programmation linéaire.pdfchapitre 1 programmation linéaire.pdf
chapitre 1 programmation linéaire.pdfolfaharrabi2
 
Planning-externes-MA-Informatique-session_2019.pdf
Planning-externes-MA-Informatique-session_2019.pdfPlanning-externes-MA-Informatique-session_2019.pdf
Planning-externes-MA-Informatique-session_2019.pdfolfaharrabi2
 
chapitre-7-listviews.pdf
chapitre-7-listviews.pdfchapitre-7-listviews.pdf
chapitre-7-listviews.pdfolfaharrabi2
 
chapitre-2-les-activites.pdf
chapitre-2-les-activites.pdfchapitre-2-les-activites.pdf
chapitre-2-les-activites.pdfolfaharrabi2
 
chapitre-1-introduction-plateforme-android (2).pdf
chapitre-1-introduction-plateforme-android (2).pdfchapitre-1-introduction-plateforme-android (2).pdf
chapitre-1-introduction-plateforme-android (2).pdfolfaharrabi2
 
cours-syst (1).pdf
cours-syst (1).pdfcours-syst (1).pdf
cours-syst (1).pdfolfaharrabi2
 

Plus de olfaharrabi2 (17)

AI.Harshini,Norah,Bhavika-2 (1).pdf presentation
AI.Harshini,Norah,Bhavika-2 (1).pdf presentationAI.Harshini,Norah,Bhavika-2 (1).pdf presentation
AI.Harshini,Norah,Bhavika-2 (1).pdf presentation
 
Ethics de lintelligence artificielle dans le domaine de business
Ethics de lintelligence artificielle dans le domaine de businessEthics de lintelligence artificielle dans le domaine de business
Ethics de lintelligence artificielle dans le domaine de business
 
artificial intelligence and applications
artificial intelligence and applicationsartificial intelligence and applications
artificial intelligence and applications
 
Chap 1 Initiation.pptx
Chap 1 Initiation.pptxChap 1 Initiation.pptx
Chap 1 Initiation.pptx
 
sa a dos.pdf
sa a dos.pdfsa a dos.pdf
sa a dos.pdf
 
intro final html.docx
intro final html.docxintro final html.docx
intro final html.docx
 
chapitre 1 PI.pdf
chapitre 1 PI.pdfchapitre 1 PI.pdf
chapitre 1 PI.pdf
 
Présentation1.pptx
Présentation1.pptxPrésentation1.pptx
Présentation1.pptx
 
Introduction to ORoperationresearch UTC.pdf
Introduction to ORoperationresearch UTC.pdfIntroduction to ORoperationresearch UTC.pdf
Introduction to ORoperationresearch UTC.pdf
 
Cours AA S2 Ch4+5.ppt
Cours AA S2 Ch4+5.pptCours AA S2 Ch4+5.ppt
Cours AA S2 Ch4+5.ppt
 
chapitre 1 programmation linéaire.pdf
chapitre 1 programmation linéaire.pdfchapitre 1 programmation linéaire.pdf
chapitre 1 programmation linéaire.pdf
 
Planning-externes-MA-Informatique-session_2019.pdf
Planning-externes-MA-Informatique-session_2019.pdfPlanning-externes-MA-Informatique-session_2019.pdf
Planning-externes-MA-Informatique-session_2019.pdf
 
chapitre-7-listviews.pdf
chapitre-7-listviews.pdfchapitre-7-listviews.pdf
chapitre-7-listviews.pdf
 
chapitre-2-les-activites.pdf
chapitre-2-les-activites.pdfchapitre-2-les-activites.pdf
chapitre-2-les-activites.pdf
 
chapitre-1-introduction-plateforme-android (2).pdf
chapitre-1-introduction-plateforme-android (2).pdfchapitre-1-introduction-plateforme-android (2).pdf
chapitre-1-introduction-plateforme-android (2).pdf
 
cours-syst (1).pdf
cours-syst (1).pdfcours-syst (1).pdf
cours-syst (1).pdf
 
17. Le DOS.pdf
17. Le DOS.pdf17. Le DOS.pdf
17. Le DOS.pdf
 

Manipulation des fichiers en C.pptx

  • 1. www.esprit.ens.tn Se former autrement pour une nouvelle génération d’ingénieurs Programmation Procédurale 2 Equipe Algorithmique 2017 / 2018
  • 2. La manipulation des fichiers en C 2
  • 3. Plan:  Qu'est-ce qu'un fichier ?  Utilité  Déclaration  Les types de fichiers  Ouverture/Fermeture  Lecture/écriture dans fichier texte  Lecture /écriture dans un fichier binaire La manipulation des fichiers en c 3
  • 4. Qu'est-ce qu'un fichier ?  Données organisées, support de sauvegarde (disquette, disque dur, CD/DVD) peut contenir du texte, de la vidéo, des données pour des applications. Mémoire de masse persistante (pas effacée quand hors- tension) 4
  • 5. Utilité  Les variables d’un programme C sont créées dans la mémoire vive  Une fois le programme est arrêté, ces variables sont supprimées de la mémoire et il devient impossible d’accéder à leurs valeurs.  Pour sauvegarder ces variables sur le disque dur, on utilise les fichiers. 5
  • 6. Manipulation de fichiers Opérations standard à mener pour travailler avec un fichier : Ouvrir un fichier : lui associer une variable que l'on appelle descripteur de fichier : permettra l'accès au fichier. Lire ou écrire des informations à partir de ce descripteur avec des fonctions spécialement prévues pour les fichiers. Fermer le fichier : indiquer que l'on a terminé de travailler avec ce fichier 6
  • 7.  Déclaration: Pour manipuler un fichier on a besoin d’un certain nombre d’informations comme:  Le mode d’accès à ce fichier  L’adresse de la mémoire tampon où se trouve le fichier  La position de la tête de lecture/écriture  État d’erreur… Toutes ces informations sont rassemblées dans le type FILE Ce type est défini dans le fichier <stdio.h> Un objet de type FILE* est nommé un flot de données Déclaration 7
  • 8. Les fichiers textes Un fichier texte est un fichier dont le contenu représente une suite de caractères lisibles. Les types de fichiers 8
  • 9. Les fichiers binaires: Tout fichier qui n’est pas de type texte est un fichier binaire Dans un fichier texte, on enregistre des textes. Dans un fichier binaire, on peut enregistrer des données complexes. Les types de fichiers 9
  • 10.  Ouverture:  Pour pouvoir lire et écrire dans un fichier il faut commencer par ouvrir ce fichier.  Syntaxe: f=fopen("chemin", "mode");  La fonction fopen ouvre un fichier et lui associe un flot de donnée.  Si l'exécution de cette fonction ne se déroule pas normalement, elle retourne une valeur NULL Il est donc recommandé de faire un test - f est une variable de type FILE* - Le premier paramètre est le chemin d’accès au fichier: exemple: "monFich.txt" , " C:mondossiermonFich.txt " - Le deuxième paramètre est une chaine de caractère spécifiant le mode d’accès . Ouverture/fermeture d’un fichier 10
  • 11. Ouverture/fermeture d’un fichier  Les 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 11
  • 12. Ouverture/fermeture d’un fichier  Les 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 "a+b" ouverture d'un fichier binaire en lecture/écriture à la fin 12
  • 13. Si le mode contient la lettre r, le fichier doit exister. 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 à la fin du fichier précédent. Ouverture /fermeture d’un fichier 13
  • 14.  Fermeture d’un fichier:  Après les manipulations, on doit annuler la liaison entre le fichier et le flot de donnée via la fonction fclose : fclose(f);  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). Ouverture/fermeture d’un fichier 14
  • 15. Lecture/écriture dans fichier texte 15  Ecriture formatée dans un fichier texte:  La fonction fprintf, analogue à printf, permet d'écrire des données dans un fichier texte. Syntaxe: int fprintf(f,"chaîne de contrôle",expression-1, ..., expression-n);  la valeur de retour indique le nombre de caractères écrits Exemple: fprintf(f, " %s %s %dn",nom, prenom, age); Remarques:  Un 'n' écrit dans un fichier provoquera un passage à la ligne  le caractère de fin de fichier est ajouté automatiquement, pas besoin de le mettre.
  • 16. Lecture/écriture dans fichier texte 16  Lecture formatée dans un fichier texte:  La fonction fscanf, analogue à scanf, permet de lire des données dans un fichier texte.  Syntaxe: int fscanf(f,"chaîne de contrôle",argument-1, ..., argument-n); fscanf fournit le nombre de valeurs lues convenablement ou la valeur EOF si une erreur s’est produite ou si une fin de fichier a été rencontrée avant qu’une seule valeur ait pu être lue.  Exemple: fscanf(f, " %s %s %dn",nom, prenom, &age);
  • 17. Lecture/écriture dans fichier texte 17  Impression et lecture d’un caractère:  La fonction fgetc, analogue à getchar, permet de lire un caractère dans un fichier texte. Syntaxe: c = fgetc(f); Cette fonction dont le type de retour est int, retourne le caractère lu dans le fichier. Elle retourne la constante EOF (End-Of- File) lorsqu'elle détecte la fin du fichier.
  • 18. Lecture/écriture dans fichier texte 18  Impression et lecture d’un caractère:  La fonction fputc, analogue à putchar, permet d’écrire un caractère dans un fichier texte. Syntaxe: fputc(c,f); Où c est une variable de type char .
  • 19. Lecture/écriture dans fichier texte 19  Lecture /écriture par ligne dans un fichier texte: fgets  La fonction fgets, analogue à gets, permet de lire toute une ligne dans un fichier texte. Syntaxe: fgets(chaine,taille,f); Où: -chaîne est de type pointeur vers char et doit pointer vers un tableau de caractères. -taille est la taille en octets du tableau de caractères pointé par chaîne. La fonction fgets rend le pointeur chaîne en cas de lecture sans erreur, ou NULL dans le cas de fin de fichier ou d'erreur. En cas de fin de fichier ou erreur, fgets rend NULL et non pas EOF!
  • 20. Lecture/écriture dans un fichier texte: 20  Lecture /écriture par ligne dans un fichier texte:fputs  La fonction fputs, analogue à puts, permet d’écrire toute une ligne dans un fichier texte. Syntaxe: fputs(chaine,f); Où: -chaîne est de type pointeur vers char et pointe vers un tableau de caractères. La fonction fputs rend une valeur non négative si l'écriture se passe sans erreur, et EOF en cas d'erreur.
  • 21. Lecture/écriture dans fichier binaire 21  Les entrées/sorties binaires:  Ces entrées/sorties sont plus efficaces que les entrées sortie standard car les données sont transférées sans transcodage.  Inconvénient: Ces fichiers ne sont pas portables car le codage dépend de la machine.
  • 22. Lecture/écriture dans fichier binaire 22  La lecture depuis un fichier binaire:  La fonction qui permet de lire des données à partir d’un fichier binaire: size_t fread (void *pointeur, size_t taille, size_t nombre, FILE *flot); • pointeur : zone de mémoire où se trouvent les éléments à écrire dans le fichier • taille : taille en octets d'un élément • 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 la variable e: fread( &e, sizeof(Etudiant), 1, f);
  • 23. Lecture/écriture dans fichier binaire 23  L’écriture dans un fichier binaire:  La fonction qui permet de sauvegarder des données dans un fichier binaire: size_t fwrite(void *pointeur, size_t taille, size_t nombre, FILE *flot); • pointeur : zone de mémoire où se trouvent les éléments à écrire dans le fichier • taille : taille en octets d'un élément • 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 e et la sauvegarder dans le fichier f fwrite( &e, sizeof(Etudiant), 1, f);
  • 24. Exemple de programmes utilisant des fichiers binaires : utiliser la similitude entre tableaux et fichiers binaires . Premier programme : tableau contenant des struct, à écrire dans un fichier binaire. La structure est définie ainsi : typedef struct s_complex { float re; float im; }t_complex; Fichiers binaires et tableaux
  • 25. Que va faire le programme ? Déclarer un tableau contenant des valeurs de type t_complex; Initialiser le tableau; ouvrir un fichier binaire en écriture si l'ouverture s'est bien déroulée écrire les éléments du tableau dans le fichier fermer le fichier Fichiers binaires et tableaux
  • 26. #include <stdio.h> /* définition du type complex */ void main() { t_complex tabc[3]={{1.0,1.0},{2.0,3.0},{3.0,-1.0}}; FILE *ficbin; ficbin=fopen("comp.bin", "wb")); if ((ficbin != NULL) { fwrite(tabc,sizeof(t_complex),1,ficbin); fwrite(tabc+1,sizeof(t_complex),1,ficbin); fwrite(tabc+2,sizeof(t_complex),1,ficbin); fclose(ficbin); } } où remplacer les 3fwrite par un seul : fwrite(tabc,sizeof(t_complex),3,ficbin); Fichiers binaires et tableaux
  • 27. Lecture d'un fichier binaire pour placer les valeurs lues dans un tableau : il faut par contre connaître par 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_complex, défini de la même manière. Programme très ressemblant, on utilisera fread à la place de fwrite ! Fichiers binaires et tableaux
  • 28. #include <stdio.h> /* définition du type complex */ void main() { t_complex tabc[3]; /* non initialisé, on va lire */ FILE *ficbin; ficbin=fopen("comp.bin","rb")); if ((ficbin!= NULL) { fread(tabc,sizeof(t_complex),3,ficbin); fclose(ficbin); } } Fichiers binaires et tableaux
  • 29. Fin du fichier 29  La fin du fichier est marquée par un caractère spécial (CTRL-Z) de fin de fichier. Cette fin de fichier est aussi nommée EOF (End Of File). Fin du fichier repéré grâce à l'emploi de la fonction feof : prototype : int feof(FILE* fic); indique si on est à la fin du fichier si la valeur de retour est différentes de 0, sinon la valeur de retour est nulle.