Chapitre 5 - Les Fichiers

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 42

Chapitre 5: Les fichiers

24/12/2020 Algorithmique et Programmation 2 256


Defaut des variables
 Le défaut des variables c’est qu’elles n’existent que dans
la mémoire vive. Une fois votre programme arrêté, toutes
vos variables sont supprimées de la mémoire et il n'est
pas possible de retrouver ensuite leur valeur.
 Comment peut-on faire un éditeur de texte si tout le texte
écrit disparaît lorsqu'on arrête le programme ?
 Heureusement, il existe ce qu’on appelle des fichiers.

24/12/2020 Algorithmique et Programmation 2 257


Les fichiers
Les entrées/sorties dans un ordinateur sont la
communication d'informations entre la mémoire de
l'ordinateur et ses périphériques (disques, clavier, écran,
imprimante, etc). Les entrées/sorties se font par le biais de
fichiers séquentiels. Un fichier séquentiel est une collection
de données de même type (souvent de caractères), dans
laquelle les données ne peuvent être lues ou écrites que les
unes apres les autres, en commençant par le début et sans
retour possible en arrière. Un fichier peut être vide ; il peut
avoir une fin ou non ; il peut être ouvert (accessible) ou
fermé.

24/12/2020 Algorithmique et Programmation 2 258


Le clavier et l’ecran
 Le clavier et l’écran sont gérés comme des
fichiers particuliers : ce sont des fichiers
texte, toujours ouverts et sans fin ; ils sont
désignés par les variables prédéfinies input
et output (dont on ne se sert quasiment
jamais).

24/12/2020 Algorithmique et Programmation 2 259


Fichiers de disque (1)

 Les fichiers de disque permettent de stocker des


informations de manière permanente, sur une
clé usb ou un disque dur ou tout support.
 Ces informations persistent même lorsque
l'ordinateur est éteint.

24/12/2020 Algorithmique et Programmation 2 262


Fichiers de disque (2)

 L'inconvénient est que ces données ne sont pas


en mémoire vive ; on n'y accède pas
directement, comme c'est le cas avec un
vecteur.
 En fait, on va lire ou écrire des données une a
une sur le disque, étant donne qu’il s'agit de
fichiers sequentiels.

24/12/2020 Algorithmique et Programmation 2 263


Nom d’un fichier de disque (3)

 Sur un disque, un fichier a un nom, par exemple


• ’’C:/Mondossier/tp4.c’’
 On peut coder ce nom dans une chaine de
caractères, par exemple:
• nomf= ’’C:/Mondossier/tp4.c’’

24/12/2020 Algorithmique et Programmation 2 264


descripteur d’un fichier et
assignation à un nom de
fichier
 Dans un algorithme qui doit manipuler ce fichier, il
faut une variable pour le designer, par exemple f.
 Déroulement des opérations
a) Declarer la variable f
• f : texte ; //Dans le cas des fichiers textes
• f : fichier de qqchose ; // Dans le cas des fichiers binaires
b) Assigner la variable f au fichier de nom nomf
assigner (f, nomf) ;

24/12/2020 Algorithmique et Programmation 2 265


Ouverture, Lecture et
Fermeture
c) Ouvrir le fichier f pour pouvoir y lire ou y écrire
les données
reinitialiser(f) ; ou reecrire (f) ;
d) Lire ou écrire des données
lire (f, donnee) ; ou ecrire (f, donnee) ;
e) Quand on a terminé, on ferme le fichier
fermer(f) ;

24/12/2020 Algorithmique et Programmation 2 266


Ouverture, Lecture et
Fermeture (2)
 On ouvre un fichier soit en lecture, soit en
écriture.
• On ne peut pas faire les deux en même temps.
 En lecture : on fait reinitialiser(f);
• puis des lire(f, ...);
• Si le fichier n'existe pas, il y a une erreur.
 En écriture : on fait reecrire(f);
• puis des ecrire(f, ...);
24/12/2020 Algorithmique et Programmation 2 267
Attention
 Si le fichier n'existe pas, un reecrire le crée. Si il
existe deja, le reecrire l'ecrase,
 c'est-a-dire que l'ancien contenu est
definitivement perdu.

24/12/2020 Algorithmique et Programmation 2 268


Fin de Fichier
 En lecture, avant de faire un lire, il faut tester si il
y a encore quelque chose à lire ; on n'a pas le
droit de faire un lire si la fin du fichier est
atteinte.
 La fonction fin(f) retourne vraie si la fin du fichier
est atteinte.

24/12/2020 Algorithmique et Programmation 2 269


Fichier d’élements ou fichier
binaire

Les fichiers d’éléments sont des copies de la


mémoire vive, les éléments étant tous du même
type. Le type d’élément peut être un type simple,
un enregistrement, un tableau, etc.

24/12/2020 Algorithmique et Programmation 2 272


Déclaration d’un fichier
d’éléments

 Declaration
VARIABLE f : file of type_element;

24/12/2020 Algorithmique et Programmation 2 273


Exemple de déclaration d’un
fichier d’élément

 Declaration
TYPE type_element = enregistrement
age : entier;
majeur : booleen;
fin;
VARIABLE f : file of type_element;
e : type_element;

24/12/2020 Algorithmique et Programmation 2 274


Fichiers d’elements: Lecture
et Ecriture
 Lecture à partir d’un fichier d’elements
• lire(f, e); lit un élément dans f.
 Ecriture dans un fichier d’elements
• ecriture(f, e); écrit un élément dans f.

24/12/2020 Algorithmique et Programmation 2 275


Exemple d’ecriture dans un
fichier d’elements

 Mettre un tableau t de nb éléments dans un


fichier.
t : tableau [1 à vmax] de type_element;
nb, i : entier;
DEBUT
… Initialisation du tableau …
nomf←’’enrfichier.bin’’;
assigner(f, nomf);
reecrire (f);
pour i allant de 1 à n faire
ecrire(f, t[i]);
fermer (f);
FIN.
24/12/2020 Algorithmique et Programmation 2 277
Lecture dans un fichier
d’elements

DEBUT
nomf← "enrfichier.bin";
assigner (f, nomf);
reecrire (f);
nb ← 0;
Tant que non fin(f) faire
debut
nb ← nb+1;
lire(f, t[nb]);
fin;
fermer (f);
FIN;
24/12/2020 Algorithmique et Programmation 2 278
Positionnement dans un
fichier d’element
La fonction positionner(f,deplacement): permet de positionner le
curseur à un endroit précis ‘déplacement’ à partir du debut.

24/12/2020 Algorithmique et Programmation 2 279


Les fichiers en C
 Deux familles de fichiers
 On distingue les fichiers de texte et les fichiers
d’éléments ou fichiers binaires.

24/12/2020 Algorithmique et Programmation 2 280


Fichiers de texte en C

 Les fichiers de textes sont les fichiers que vous


pouvez éditer, comme par exemple vos fichiers
C.

24/12/2020 Algorithmique et Programmation 2 281


Declaration d’un fichier en C
 File * f;

24/12/2020 Algorithmique et Programmation 2 282


Ouverture et fermeture d’un
fichier

 f=fopen(nomdufichieraouvrir, ’’ModeOuverture’’);

24/12/2020 Algorithmique et Programmation 2 283


Mode d’ouverture
-"r": lecture seule. Vous pourrez lire le contenu du fichier, mais
pas y écrire. Le fichier doit avoir été créé au préalable.
•"w": écriture seule. Vous pourrez écrire dans le fichier, mais
pas lire son contenu. Si le fichier n'existe pas, il sera créé.
•"a": mode d'ajout. Vous écrirez dans le fichier, en partant de la
fin du fichier. Vous ajouterez donc du texte à la fin du fichier. Si le
fichier n'existe pas, il sera créé.
•"r+": lecture et écriture. Vous pourrez lire et écrire dans le
fichier. Le fichier doit avoir été créé au préalable.

24/12/2020 Algorithmique et Programmation 2 284


Mode d’ouverture
•"w+": lecture et écriture, avec suppression du contenu au
préalable. Le fichier est donc d'abord vidé de son contenu, vous
pouvez y écrire, et le lire ensuite. Si le fichier n'existe pas, il sera
créé. (Attention à ce mode d’ouverture).
•"a+": ajout en lecture / écriture à la fin. Vous écrivez et lisez
du texte à partir de la fin du fichier. Si le fichier n'existe pas, il
sera créé.
•Il existe d’autres modes ("rb" "wb" "ab" "rb+" "wb+" "ab+") pour les
, , , , ,

fichiers binaires que nous verrons plus loin.

24/12/2020 Algorithmique et Programmation 2 285


FILE* fichier = NULL;

Exemple
•FILE * f = NULL;

•f=fopen(“Monfichier.txt”,”r+”); // Chemin relatif


•Ou bien (chemin complet)
•f = fopen("C:\\Program Files\\MonRep\\Monfichier.txt", "r+");

24/12/2020 Algorithmique et Programmation 2 286


Ecriture dans un fichier texte
Il existe plusieurs fonctions capables d'écrire dans un fichier. Ce sera à vous de choisir
celle qui est la plus adaptée à votre cas.
Voici les trois fonctions que nous allons étudier :
•fputc(int character, FILE * stream): écrit un caractère dans le fichier (UN SEUL caractère à la fois) ;
•fputs(char * chaine, FILE * stream): écrit une chaîne dans le fichier ;
•fprintf: écrit une chaîne « formatée » dans le fichier, fonctionnement quasi-identique à.printf

Exemple ?

short int age;


age=23;
fprintf(f, "Le Monsieur qui utilise le programme, il a %d ans", age);

24/12/2020 Algorithmique et Programmation 2 288


Lire dans un fichier texte en
C
 fgetc(FILE *f): lit un caractère ; Cette fonction retourne un int: c'est le
caractère qui a été lu. Si la fonction n'a pas pu lire de caractère, elle
retourne EOF.

 fgets(File *f): lit une chaîne ;

 Cette fonction lit une chaîne dans le fichier. Ça vous évite d'avoir à lire les
caractères un par un. La fonction lit au maximum une ligne (elle s'arrête
au premier\n qu'elle rencontre).

 Si vous voulez lire plusieurs lignes, il faudra faire une boucle.


• fgets(chaine, TAILLE_MAX, f);

 fscanf: lit une chaîne formatée. C'est le même principe que la fonction
scanf, là encore.
24/12/2020 Algorithmique et Programmation 2 289
Se deplacer dans un fichier
 Chaque fois que vous ouvrez un fichier, il existe en effet un curseur qui
indique votre position dans le fichier. Vous pouvez imaginer que c'est
exactement comme le curseur de votre éditeur de texte prefere (tel Bloc-
Notes). Il indique où vous êtes dans le fichier, et donc où vous allez écrire.
 En résumé, le système de curseur vous permet d'aller lire et écrire à une
position précise dans le fichier.
•ftell: indique à quelle position vous êtes actuellement dans le
fichier ;
•rewind: remet le curseur au début du fichier (c'est équivalent
à demander à la function fseek de positionner le curseur au
début).

24/12/2020 Algorithmique et Programmation 2 290


Se deplacer dans un fichier
fseek: positionne le curseur à un endroit précis ;
Le prototype de fseek est le suivant
• fseek(f, deplacement, origine);

La function fseek permet de déplacer le curseur d'un certain nombre de


caractères (indiqué pardeplacement) à partir de la position indiquée
parorigine.
•Le nombre deplacementpeut être un nombre positif (pour se déplacer en
avant), nul (= 0) ou négatif (pour se déplacer en arrière).
•Quant au nombre origine, vous pouvez mettre comme valeur l'une des trois
listées ci-dessous :
•SEEK_SET: indique le début du fichier ;
•SEEK_CUR: indique la position actuelle du curseur ;
•SEEK_END: indique la fin du fichier.

24/12/2020 Algorithmique et Programmation 2 291


Exemple

•fseek(f, 2, SEEK_SET);
•fseek(f, -4, SEEK_CUR);
•fseek(f, 0, SEEK_END);

24/12/2020 Algorithmique et Programmation 2 292


Renommer un fichier
 rename(’’monfichier.txt’’,’’monfichier_renomme.txt’’)

24/12/2020 Algorithmique et Programmation 2 293


Supprimer un fichier
 remove(‘’monfichier.txt’’)

24/12/2020 Algorithmique et Programmation 2 294


Fermeture d’un fichier
 fclose(f); permet de fermer le fichier.

24/12/2020 Algorithmique et Programmation 2 296


Fichier Binaire en C
En opposition aux fichiers textes
qui contiennent des caracteres,
Il existe ce qu’on appelle des
fichiers binaires qui contiennent
des données binaires.

24/12/2020 Algorithmique et Programmation 2 297


Declaration et Ouverture d’un
fichier Binaire en C
Même chose que pour les fichiers
textes à la seule différence du
mode d’ouverture.
("rb","wb","ab","rb+","wb+","ab+")

24/12/2020 Algorithmique et Programmation 2 298


Ecriture dans un fichier binaire

fwrite(&objet,sizeof(objet),nombre,fichier)

24/12/2020 Algorithmique et Programmation 2 299


Ecriture d’un enregistrement
dans un fichier binaire
fwrite()
typedef struct {

int age;
char nom[30];
char prenom[30];
char adresse[60];
int nombreFreres;

}SPersonne ;

SPersonne personne; //Je déclare une variable de type SPersonne

Personne={23,’diop’,’moussa’,’sanar’,4)
fwrite( &personne , sizeof(personne) , 1 , f);

24/12/2020 Algorithmique et Programmation 2 300


Ecriture d’un tableau dans un
fichier binaire
int tab[10];

fwrite( tab , sizeof(tab[0]) , sizeof(tab)/sizeof(tab[0]) , f);


ou
fwrite( tab , sizeof(tab) , 1 , f);

24/12/2020 Algorithmique et Programmation 2 301


Lecture à partir d’un fichier
binaire
Soit une variable v chargée dans le fichier on peut la lire grace à
l’instruction:

fread( &var , sizeof(var) , 1 , f);

24/12/2020 Algorithmique et Programmation 2 303


Lecture d’un enregistrement à
partir un fichier binaire
fread( &personne1 , sizeof(personne1) , 1 , f);

24/12/2020 Algorithmique et Programmation 2 304


Lecture d’un tableau à partir un
fichier binaire
int tab[10];

fread( tab , sizeof(tab) , 1 , f);

Si on a sauvegarde avec fwrite( tab , sizeof(tab) , 1 , f);

fread( tab , sizeof(tab[0]) , sizeof(tab)/sizeof(tab[0]) , f);


Si on a sauvegarde avec
fwrite( tab , sizeof(tab[0]) , sizeof(tab)/sizeof(tab[0]) , f);

24/12/2020 Algorithmique et Programmation 2 305

Vous aimerez peut-être aussi