0% ont trouvé ce document utile (0 vote)
132 vues21 pages

Les Fichiers

Transféré par

azyssf936
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PPTX, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
132 vues21 pages

Les Fichiers

Transféré par

azyssf936
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PPTX, PDF, TXT ou lisez en ligne sur Scribd

Langage C :

Les fichiers

[email protected]
Les entrées-sorties standards
 Trois pointeurs de flots standards existants au démarrage d’un
processus (programme en exécution)
 stdin : flot standard d’entrée (clavier)
 stdout : flot standard de sortie (écran)
 stderr : flot standard d’erreur (écran)
 Fermés automatiquement à la terminaison du processus
 Les flots standards ne permet pas de stocker des données, ou
d’exploiter des données déjà existantes.
 Le langage C offre la possibilité de lire et d’écrire des données dans
un fichier (utiliser d’autres flots)
Manipulation des fichiers
 Fonctions de haut niveau : (opérations)
 Fonction d’ouverture d’un fichier : « fopen »
Prend un chemin dans le système de fichiers et renvoie un pointeur de
type File sur le fichier
 Fonctions de lecture, d’écriture et de positionnement :
« fscanf/fread », « fprintf/fwrite », « fseek » Utilsant le pointeur
 Fonction de fermeture : « fclose »
Clôt le fichier
Fonction fopen()
 Ouverture d’un fichier : fopen(″chemin″, ″mode ″);
 Mode : spécifie le mode d’accès au fichier. Les spécificateurs de
mode d’accès diffèrent suivant le type de fichier considéré.
 On distingue
 Les fichiers textes, pour lesquels les caractères de contrôle (retour à la
ligne . . . ) seront interprétés en tant que tels lors de la lecture et de
l’écriture
 Les fichiers binaires, pour lesquels les caractères de contrôle se sont
pas interprétés.
Fonction fopen()
 Les différents modes d’accès sont les suivants:
Fonction fopen()
Ces modes d’accès ont pour particularités :
 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à a, 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 `a la fin du fichier précédent.
Fonction fopen()
 La fonction fopen renvoie un pointeur sur une structure de type FILE
FILE * f_IN;
f_IN = fopen(″chemin″, ″mode ″);
 Si l’ouverture a réussi, la valeur retournée permet de repérer le fichier
 Si l’ouverture s’est échoué, fopen rend la valeur NULL

 Penser à tester la valeur de retour de la fonction fopen


if((f_IN = fopen(″monFichier.txt″, ″r+″)) == NULL) {
printf(″Impossible d’ouvrir le fichier \n″);
}
Fonction fclose()
 Sert a fermer le flot associé au pointeur
FILE * f_IN = fopen(″monFichier.txt″, ″r+″);
/* Opérations sur le fichier */
fclose(f_IN);
 Elle retourne 0 en cas de succès, -1 sinon
 Toujours fermer un flot dès que l’on peut
 Toujours ne le fermer qu’une seule fois
Fonctions fgetc() et fputc()
 fgetc(FILE *f_IN) :
 Permet de lire un caractère depuis le flot;
 Retourne un entier représentant le caractère ou le EOF

 fputc(int c, FILE *f_OUT) : permet d’écrire le caractère c sur le flot

 Exercice :
Écrire un programme permettant de lire le contenu d’un fichier
« fichier1.txt » et le copier caractère par caractère dans le fichier
« fichier2.txt »
Fonctions fgetc() et fputc()
 Solution :
Fonctions fgets() et fputs()
 fgets(char *ptr_s, int taille, FILE *f_IN)
 Permet de lire une chaîne de caractère depuis le flot
 Ptr_s : une chaîne qui compte au maximum taille
 F_IN : pointeur vers le fichier

 fputs(char *ptr_s, FILE *f_OUT)


 Permet d’écrire la chaîne de caractère ptr_s dans le flot
Fonctions fscanf() et fprintf()
 fprintf(f_IN,"format",expression-1, ..., expression-n)
 La fonction fprintf, analogue à printf, permet d’écrire des données dans
un fichier
 Elle retourne le nombre de caractère écrits ou une valeur négative
 fscanf(f_OUT,"format",argument-1,...,argument-n)
 La fonction fscanf, analogue à scanf, permet de lire des données dans
un fichier
 Retourne 1 si la lecture est réussie, 1- sinon
 Utiliser feof et ferror pour tester la fin du fichier ou une erreur
d’entrée-sortie
Exemple : copier un fichiers d’entiers
Les entrées-sorties binaires
 Les fonctions d’entrées-sorties binaires permettent de transférer des
blocs de données dans un fichier sans transcodage. Elles sont donc
plus efficaces que les fonctions d’entrée-sortie standard, mais les
fichiers produits ne sont pas portables puisque le codage des
données dépend des machines.

 Elles sont notamment utiles pour manipuler des données de grande


taille ou ayant un type composé. Leurs syntaxes sont :
 int fread(void *pointeur, int taille, int nombre, FILE *flot);
 int fwrite(void *pointeur, int taille, int nombre, FILE *flot);

 où pointeur est l’adresse du début des données à transférer, taille la


taille des objets à transférer, nombre leur nombre.
Fonctions fread, fwrite et ffluch
 fread(ptr, taille, nbr, f_IN)
 retourne le nombre de caractère écrits ou une valeur négative
 fwrite(ptr, taille, nbr, f_OUT)
Personne *pers;
int nbrePers;
FILE *f_IN;
…..
if(fwrite(pers, sizeof(Personne), nbrePers, f_IN) < nbrePers) {
printf("Impossible de sauvegarder le vecteur \n");
fclose(f_IN);
}
 La fonction ffluch permet de forcer le vidage de la mémoire tampon
associée à un flot en sortie/entrée
int ffluch(FILE *flot);
Repositionnement du pointeur dans un ficher
 ftell(FILE *flot) : retourne la position courante dans un fichier
 fseek : permet de se positionner dans un fichier
 rewind(FILE *flot) : permet de se positionner au début d’un fichier

 fseek(FILE *flot, long déplacement, int origine);


La variable déplacement détermine la nouvelle position dans le fichier.
Il s’agit d’un déplacement relatif par rapport à l’origine ; il est compté
en nombre d’octets. La variable origine peut prendre trois valeurs :
 SEEK SET (égale à 0) : début du fichier ;
 SEEK CUR (égale à 1) : position courante ;
 SEEK END (égale `a 2) : fin du fichier.
TD sur les fichiers
A/ Écrire un programme qui calcule le nombre de lettre, de chiffres, de
ligne d’un fichier

B/ Ecrire un programme qui affiche les consones d’un fichier texte

C/ Écrire un programme permettant de recopier le contenu d’un fichier


à l’envers. On considère que le fichier contient que des mots construits
par des lettres alphabet

D/ Écrire un programme analysant un fichier texte et indiquant le


nombre d’occurrences de caractères et de chiffres dans le fichier
Correction : A (statistique d’un fichier)
Correction : B (Consones dans un fichier)
Correction : C (Convertisseur du fichier )
Version 1 (sans récursivité)
Correction : C (Convertisseur du fichier )
Version 2 (sans récursivité)

Vous aimerez peut-être aussi