Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
Le traitement de fichiers
Thmes abords
Applications. Les L fichiers fi hi au format f tt texte. t
Cration, ouverture, lecture, criture, Fonctions particulires pour les fichiers texte.
Le traitement de fichiers
Applications qui consomment ou produisent des fichiers
Texte ou binaire
Dfinitions
Un fichier texte
Utilise les lettres, lettres les chiffres, chiffres les signes de ponctuation. ponct ation Reprsente linformation sous forme textuelle. Souvent, le contenu est intelligible pour nous.
Un fichier binaire
Contient directement des valeurs numriques. Une application particulire est utilise pour rendre le contenu intelligible intelligible.
Texte ou binaire
Exemple un fichier texte observ avec NotePad et HexMad
Texte ou binaire
Exemple un fichier binaire observ avec NotePad, Paint et HexMad
La bibliothque du langage C
Offre des fonctions standards pour po r la gestion de fichiers fichiers. Rassembles pour la plupart dans stdio.h
Binaire ou texte ?
Certaines fonctions sont communes aux deux types. Dautres sont plus spcifiques un type de fichiers.
Chemin relatif
Relatif au rpertoire courant . En gnral, au dbut, cest le rpertoire contenant lexcutable. Il peut tre chang par programme (fonction chdir). Syntaxe particulire
Rpertoire parent : ".." Rpertoire courant : "." "Poil de carotte.txt" ".\\Poil de carotte.txt" "..\\Labo2\\Poil de carotte.txt"
Exemples :
Retourne buffer en cas de succs, NULL en cas dchec. Place au maximum max_count caractres dans buffer. Sarrte la fin dune ligne.
10
Accs squentiel
Le conten contenu d du fichier est l lu dans lordre lordre, de faon sq squentielle. entielle A partir de la position courante. On finit par atteindre la fin du fichier.
Retourne
0 si la fin de fichier nest pas atteinte. Une valeur diffrente de 0 quand la fin de fichier est atteinte.
11
12
13
fichier = fopen("Poil de carotte.txt", "r"); if (fichier != NULL) { while (!feof(fichier)) { fgets(ligne, LONGUEUR_MAX, fichier); if (!ferror(fichier)) puts(ligne); else { printf("Erreur lors de la lecture du fichier\n"); break; // poursuite de la lecture impossible, sortir } } fclose(fichier); } else printf("Erreur lors de l'ouverture du fichier.\n"); printf("Pressez une touche..."); _getch(); }
Analyse et programmation 2 - Le traitement de fichiers 14
Retourne une valeur non ngative en cas de succs, EOF si chec. Ecrit une ligne et un saut de ligne dans le fichier.
15
16
Que se passerait-il si: - Le fichier tait en lecture seule ? - on ne testait pas les erreurs ?
fichier = fopen("Essai.txt", "w"); if (fichier != NULL) { for (i = 0; i < 10; i++) { fprintf(fichier, "ligne %d\n", i); if (ferror(fichier)) { printf("Erreur lors de l'ecriture.\n"); break; } } if (fclose(fichier)) printf("Le fichier n'a pas ete correctement ecrit.\n"); } else printf("Erreur lors de l'ouverture du fichier.\n"); printf("Pressez une touche..."); _getch(); }
Analyse et programmation 2 - Le traitement de fichiers 17
Les fonctions de fichier lisent et crivent automatiquement les fins de ligne dans le format Windows.
18
19
10
20
XML
eXtended Markup Language : langage balises tendu.
Nombreux outils disponibles pour exploiter ce format. Donc, il est intressant connatre
21
11
Structure
Format purement textuel. Valeurs encadres par une balise ouvrante et fermante. fermante Hirarchique. Les balises peuvent tre librement dfinies selon les besoins de lapplication. Les sauts de ligne et espaces sont non significatifs. Un fichier doit contenir un nud principal unique.
Analyse et programmation 2 - Le traitement de fichiers 22
</Vecteur> <Vecteur>
<X>1100</X> <Y>2100</Y> <Z>3100</Z>
</Vecteur> <Vecteur>
<X>1200</X> <Y>2200</Y> <Z>3200</Z>
</Vecteur>
</Positions>
Analyse et programmation 2 - Le traitement de fichiers 23
12
24
La gnration de fichiers XML ne pose aucune difficult. Il suffit ffit de d gnrer un fichier fi hi texte, t t selon l l les spcifications du format souhait. Pas doutil spcial ncessaire.
25
13
Simplification possible
Formater le XML pour en simplifier linterprtation Ex : 1 balise ou 1 valeur par ligne seulement. <Positions> <Vecteur> <X> 1000 </X> <Y> 2000 </Y>
27
14
28
2 types daccs
Accs squentiel
Les lments sont lus ou crits lun aprs lautre dans le fichier.
Accs direct
Les lments sont crits une position donne. donne La position courante dcriture est dplace en cours dutilisation. Application typique : les bases de donnes.
29
15
30
31
16
fwrite
Permet dcrire une ne ou o plusieurs pl sie rs variables ariables dans un n fichier fichier. Ecriture exacte du contenu de la mmoire.
Prototype
int fwrite(const void* data, int size, int count, FILE* file); data : pointeur sur une ou plusieurs variables, de nimporte quel type. size: taille dun lment crire count :nombre dlments crire. file: fichier. Valeur retourne :
le nombre dlments effectivement crits, count si tout a bien fonctionn.
32
33
17
34
typedef struct { char code; short taille; double prix; } article article article1 = {'A', 42, 25.50};
35
18
Observation
On a crit des informations s supplmentaires pplmentaires non dsires dsires. Lies lalignement interne des variables sur des mots du processeur.
Parades
Ecrire les donnes champ par champ.
Fastidieux.
Informer le compilateur qu quon on ne souhaite pas aligner la structure sur les mots du processeur.
Dgradation des performances.
36
typedef struct { char code; short taille; double prix; } article article article1 = {'A', 42, 25.50};
Analyse et programmation 2 - Le traitement de fichiers 37
19
Mmorise les options dalignement sur une pile Force lalignement des variables sur 1 octet.
fread
Permet de lire une ne ou o plusieurs pl sie rs variables ariables depuis dep is un n fichier fichier. Lecture du fichier et criture directe dans la mmoire.
Prototype
int fread(void* buffer, int size, int count, FILE* file); buffer: pointeur sur la variable de destination, de nimporte quel type. size: taille dun lment lire. count :nombre dlments lire. file: fichier. Valeur retourne :
le nombre dlments effectivement lus, count si tout a bien fonctionn, ou moins sil y en avait moins de disponible.
Analyse et programmation 2 - Le traitement de fichiers 39
20
fseek
int fseek(FILE* file, long offset, int origin); Change la position courante du fichier. origin peut prendre le valeurs :
SEEK_SET : offset est donn par rapport au dbut du fichier. SEEK_CUR: offset est donn par rapport la position courante. SEEK_END: SEEK END: offset est donn par rapport la fin du fichier fichier.
rewind
void rewind(FILE* file); Remet la position courante au dbut du fichier. Equivalent : fseek(file, 0L, SEEK_SET);
Analyse et programmation 2 - Le traitement de fichiers 41
21
fgetpos
Permet dacqurir d acqurir un marqueur sur la position courante. courante Le contenu de fpos_t est priv (pas exploitable directement). int fgetpos(FILE* file, fpos_t* pos);
fsetpos
Permet de se repositionner sur un marqueur prcdemment acquis. int fsetpos(FILE* file, const fpos_t* pos);
Exemple
fpos_t marqueur1; fgetpos(fichier, &marqueur1); . . . fsetpos(fichier, &marqueur1);
Analyse et programmation 2 - Le traitement de fichiers 42
Renommer
int rename(const char* filename filename, const char* new_filename);
Supprimer
int remove(const char filename);
Rsultats
Ces fonctions renvoient 0 en cas de succs, != 0 sinon. Le fichier ne doit pas tre ouvert (empche le renommage et la suppression)
43
22
E En-tte
Donnes
44
45
23
47
24
Format gnral
En-tte du fichier BitmapFileHeader En-tte de limage BitmapInfoHeader Palette optionnelle RGBQUAD[] Q []
Donnes
RGB RGB RGB RGB RGB RGB RGB RGB RGB RGB RGB RGB RGB RGB RGB RGB RGB RGB RGB RGB RGB RGB RGB RGB RGB RGB RGB RGB RGB RGB
48
25
50
51
26
52
Domaine dapplication
Stockage structur str ct r et exploitation e ploitation de gros volumes ol mes de donnes donnes. Accs concurrent par plusieurs utilisateurs. Banque, assurances, administration, comptabilit,
Principe de fonctionnement
Fichier binaire ouvert en permanence. Dcoupage en enregistrements , blocs de taille connue. Dplacement du pointeur de lecture/criture dans le fichier
53
27
54
55
28
56
57
29
58
Exemple
#include <stdio.h> int main(int argc, char* argv[]) { int i;
Nombre darguments
for (i = 0; i < argc; i++) printf("Parametre %d: %s\n", i, argv[i]); printf("Pressez une touche..."); _getch(); }
Analyse et programmation 2 - Le traitement de fichiers 59
30
Quavons-nous appris ?
Les gestion des fichiers en C
Diffrents formats
Textes Binaires
Diffrents accs
Squentiel Direct (pour les fichiers binaires)
60
Vos questions
61
31