Vous êtes sur la page 1sur 31

Analyse et programmation 2

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.

Les fichiers binaires.


Fonctions particulires pour les fichiers binaires. Lalignement des structures. Retour sur la fonction main : argc et argv.

Analyse et programmation 2 - Le traitement de fichiers

Le traitement de fichiers
Applications qui consomment ou produisent des fichiers

Analyse et programmation 2 - Le traitement de 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.

Analyse et programmation 2 - Le traitement de fichiers

Texte ou binaire
Exemple un fichier texte observ avec NotePad et HexMad

Analyse et programmation 2 - Le traitement de fichiers

Texte ou binaire
Exemple un fichier binaire observ avec NotePad, Paint et HexMad

Analyse et programmation 2 - Le traitement de fichiers

Traitement des fichiers texte en C


Les fonctions

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.

Analyse et programmation 2 - Le traitement de fichiers

Traitement des fichiers texte en C


Ouverture dun fichier

Pour pouvoir tre utilis, un fichier doit tre ouvert


Cela permet au a s systme stme dexploitation de ploitation de se prparer prparer. Chargement en mmoire dinformations ncessaires. Fournir au programmeur un descripteur de fichier :
Pointeur dsignant le fichier pour la suite du programme.

Comment ouvrir un fichier : la fonction fopen


FILE* fichier; // Descripteur de fichier fichier = fopen("Poil de carotte.txt", "r");
chemin relatif ou absolu mode

if (fichier != NULL) // ouverture russie


Analyse et programmation 2 - Le traitement de fichiers 7

Traitement des fichiers texte en C


Ouverture dun fichier Chemin relatif et absolu Chemin absolu
On indique tous les rpertoires depuis la racine. Syntaxe dpendante du systme dexploitation. Attention la syntaxe du langage C : doubler les \\ Exemple :
"C:\\APR2\\Poil de carotte.txt"

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 :

Analyse et programmation 2 - Le traitement de fichiers

Traitement des fichiers texte en C


Ouverture dun fichier les diffrents modes
Mode "r" "w" "a" "r+" "w+" "a+" Effet Ouverture dun fichier texte en lecture. Cration dun fichier texte, ouverture en criture. Si le fichier existait dj, il est cras. Ouverture dun fichier texte en criture, positionnement la fin (complter). Si le fichier nexistait pas, il est cr. Ouverture dun fichier texte en lecture/criture. Cration dun fichier texte, ouverture en lecture/criture. Ouverture dun fichier texte en lecture/criture, , criture p partir de la fin.

Peu utilis, fonctionnement un peu droutant

Analyse et programmation 2 - Le traitement de fichiers

Traitement des fichiers texte en C


Lecture dans un fichier texte

Plusieurs fonctions de lecture pour le texte :


fgetc : lit un n caractre caractre.
int fgetc(FILE* file);

fgets : lit une ligne de texte.


char* fgets(char* buffer, int max_count, FILE* file);

Retourne buffer en cas de succs, NULL en cas dchec. Place au maximum max_count caractres dans buffer. Sarrte la fin dune ligne.

fscanf f f : lecture l t selon l une spcification ifi ti d de f format t


int fscanf(FILE* file, const char* format, ...); Fonctionne comme scanf, mais lit depuis un fichier.

Analyse et programmation 2 - Le traitement de fichiers

10

Traitement des fichiers texte en C


Dtection de la fin dun fichier texte

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.

Comment dtecter la fin de fichier par programme


Fonction spciale feof (File End Of File)
int feof(FILE* file);

Retourne
0 si la fin de fichier nest pas atteinte. Une valeur diffrente de 0 quand la fin de fichier est atteinte.

Analyse et programmation 2 - Le traitement de fichiers

11

Traitement des fichiers texte en C


Fermeture dun fichier texte

Tant que le fichier est ouvert


De la mmoire est utilise tilise po pour r le descripte descripteur r de fichier fichier. Le fichier est verrouill :
il ne peut pas tre dtruit, renomm, crit.

Lorsque le traitement de fichier est termin


Il faut refermer le fichier. La fonction fclose est prvue cet effet.
int fclose(FILE fclose(FILE* file);

Renvoie 0 si la fermeture a russi. Renvoie != 0 en cas de problme.

Analyse et programmation 2 - Le traitement de fichiers

12

Traitement des fichiers texte en C


Problmes lors de la lecture dun fichier

Un problme peut survenir durant la lecture


Fichier s sur r un n mdia amo amovible: ible:
on retire le mdia pendant la lecture, une erreur survient.

Fichier sur un disque dur:


Les secteurs contenant le fichier peuvent tre altrs.

Dtecter les erreurs pendant la lecture


Il est vivement recommand de le faire. La fonction ferror est prvue cet effet. effet
int ferror(FILE* file);

Renvoie != 0 si une erreur est survenue. Renvoie 0 si tout va bien.

Analyse et programmation 2 - Le traitement de fichiers

13

Traitement des fichiers texte en C


Exemple typique pour la lecture dun fichier texte
#include <stdio.h> #define LONGUEUR_MAX 80 int main() { FILE* fichier; char ligne[LONGUEUR_MAX];

Que se passerait-il si on ne testait pas les erreurs ?

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

Traitement des fichiers texte en C


Ecriture dans un fichier texte

Plusieurs fonctions dcriture pour le texte :


fputc fp tc : crit un n caractre caractre.
int fputc(char c, FILE* file);

Retourne le caractre crit, ou EOF (-1) en cas derreur.

fputs : crit une ligne de texte et un saut de ligne.


int fputs(const char* text, FILE* file);

Retourne une valeur non ngative en cas de succs, EOF si chec. Ecrit une ligne et un saut de ligne dans le fichier.

fprintf f i tf : criture it selon l une spcification ifi ti d de f format t


int fprintf(FILE* file, const char* format, ...); Fonctionne comme printf, mais crit dans un fichier. Retourne le nombre de caractres crits, une valeur ngative si erreur

Analyse et programmation 2 - Le traitement de fichiers

15

Traitement des fichiers texte en C


Ecriture dans un fichier texte

Particularits lors de lcriture de fichiers


Les fonctions dcrit dcriture re prparent les donnes crire crire. Elles ne sont pas ncessairement crites immdiatement. La fermeture du fichier force lcriture sur le disque. Si fclose retourne une erreur, il y a eu un problme dcriture.
int fflush(FILE* file);

Forcer lcriture des donnes


Retourne 0 en cas de succs, succs EOF en cas d derreur erreur.

Analyse et programmation 2 - Le traitement de fichiers

16

Traitement des fichiers texte en C


Exemple typique pour lcriture dun fichier texte
#include <stdio.h> int main() { FILE * fichier; int i;

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

Traitement des fichiers texte en C


Gestion des fins de ligne Les fins de lignes dans les fichiers sous Dos/Windows
Elles sont marques par la paire CR CR-LF LF (\r\n) Que se passe-t-il lorsquon crit \n simplement ?

Les fonctions de fichier lisent et crivent automatiquement les fins de ligne dans le format Windows.

Analyse et programmation 2 - Le traitement de fichiers

18

Traitement des fichiers textes en C


Les flux standards

Il existe 3 flux standards


Utilisables avec a ec les fonctions fichier. fichier stdin : fichier correspondant la saisie dans la console. stdout : fichier correspondant laffichage console. stderr : flux de sortie pour les messages derreur, en gnral identique stdout.

printf(format, ) est quivalent fprintf(stdout format fprintf(stdout, format, ); );

Analyse et programmation 2 - Le traitement de fichiers

19

10

Application rpandue des fichiers texte


Lchange de donnes informatis - XML

Besoin important dchanger de linformation structure


Commande informatise de pices auprs a prs d dun n fo fournisseur. rnisse r Suivi automatis de cotations boursires. Envoi dune trajectoire une commande de robot. Envoi de la liste des titres musicaux sur un lecteur MP3.

Analyse et programmation 2 - Le traitement de fichiers

20

Application rpandue des fichiers texte


Lchange de donnes informatis - XML

Base commune pour les formats texte


Normalise par le w3c 3c ( (world orld wide ide web eb consorti consortium). m) Premire version en 1998.

XML
eXtended Markup Language : langage balises tendu.

Nombreux outils disponibles pour exploiter ce format. Donc, il est intressant connatre

Analyse et programmation 2 - Le traitement de fichiers

21

11

Application rpandue des fichiers texte


Lchange de donnes informatis XML Codage des structures Exemple
<Vecteur> <X>1000</X> <Y>2000</Y> <Z>3000</Z> </Vecteur>

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

Application rpandue des fichiers texte


Lchange de donnes informatis XML Codage des tableaux <Positions>
<Vecteur>
<X>1000</X> <Y>2000</Y> <Z>3000</Z>

</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

Application rpandue des fichiers texte


Lchange de donnes informatis XML Visualiseurs/Editeurs gratuits

Analyse et programmation 2 - Le traitement de fichiers

24

Application rpandue des fichiers texte


Lchange de donnes informatis XML Gnrer par programme

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.

Analyse et programmation 2 - Le traitement de fichiers

25

13

Application rpandue des fichiers texte


Lchange de donnes informatis XML Gnrer par programme
int main() { const int NOMBRE_POINT = 100; const double RAYON = 50; const double CENTREX = 0.0, CENTREY = 0.0; int i; FILE *f; f = fopen("trajectoire.xml", "w"); if (f != NULL) { fprintf(f, "<Trajectoire>\n"); for (i = 0; i < NOMBRE_POINT; i++) { fprintf(f, "<Vecteur>\n"); fprintf(f, "<X>%lf</X><Y>%lf</Y>\n", CENTREX + RAYON * cos(2 * M_PI M PI * i / NOMBRE NOMBRE_POINT), POINT) CENTREY + RAYON * sin(2 * M_PI * i / NOMBRE_POINT)); fprintf(f, "</Vecteur>\n"); } fprintf(f, "</Trajectoire>\n"); fclose(f); } system("PAUSE"); return 0; }
Analyse et programmation 2 - Le traitement de fichiers 26

Application rpandue des fichiers texte


Lchange de donnes informatis XML Lire par programme La lecture de fichiers XML est plus dlicate. Bibliothques logicielles spcialises
XML Parser

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>

Analyse et programmation 2 - Le traitement de fichiers

27

14

Analyse et programmation 2 - Le traitement de fichiers

28

Traitement des fichiers binaires en C


Ouverture

Principe similaire aux fichiers textes.


O Ouverture ert re du d fichier avec a ec fopen fopen. La gestion binaire est prcise dans le mode douverture.

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.

Analyse et programmation 2 - Le traitement de fichiers

29

15

Traitement des fichiers binaires en C


Ouverture dun fichier les diffrents modes
Mode "rb" "wb" "ab" "rb+" "wb+" "ab+" Effet Ouverture dun fichier binaire en lecture. Cration dun fichier binaire, ouverture en criture. Ouverture dun fichier binaire en criture, positionnement la fin (complter). Ouverture dun fichier binaire en lecture/criture. Cration dun fichier binaire, ouverture en lecture/criture. Ouverture dun fichier binaire en lecture/criture, criture partir de la fin.

Analyse et programmation 2 - Le traitement de fichiers

30

Traitement des fichiers binaires en C


Lecture et criture

Les fonctions de lecture criture du mode texte


Sont utilisables tilisables avec a ec les fichiers binaires. binaires Interprtation de certains caractres en lecture
En mode texte : '\r' '\n' -> '\n' CtrlZ (26) : en mode texte, reprsente la fin du fichier.

Quelle est finalement la diffrence entre binaire et texte ?

Interprtation de certains caractres en criture


criture en mode texte : '\n' \n -> '\r' \r '\n' \n Ecriture en mode binaire : '\n' -> '\n'

Analyse et programmation 2 - Le traitement de fichiers

31

16

Traitement des fichiers binaires en C


Ecriture

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.

Analyse et programmation 2 - Le traitement de fichiers

32

Traitement des fichiers binaires en C


Ecriture exemple typique
#include <stdio.h> typedef struct { char code; short taille; double prix; } article; int main() { FILE * fichier; article article1 = { 'A', 42, 25.50 }; fichier = fopen("article1.raw", "wb"); if (fichier != NULL) { fwrite(&article1, sizeof(article), 1, fichier); 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

33

17

Traitement des fichiers binaires en C


Ecriture exemple typique avec un tableau
#include <stdio.h> typedef struct { char code; short taille; double prix; } article; int main() { FILE * fichier; article articles[3] = { { 'A', 42, 25.50 }, { 'A', 43, 26.50 }, { 'B', 40, 32.00 } }; fichier = fopen( fopen("articles.raw", articles.raw , "wb"); wb ); if (fichier != NULL) { fwrite(articles, sizeof(article), 3, fichier); 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

34

Traitement des fichiers binaires en C


Ecriture analyse du rsultat

typedef struct { char code; short taille; double prix; } article article article1 = {'A', 42, 25.50};

Analyse et programmation 2 - Le traitement de fichiers

35

18

Traitement des fichiers binaires en C


Alignement de structures

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.

Analyse et programmation 2 - Le traitement de fichiers

36

Traitement des fichiers binaires en C


Alignement de structures solution 1: crire champ par champ
. . . if (fichier != NULL) { fwrite(&article1.code, sizeof(char), 1, fichier); fwrite(&article1.taille, sizeof(short), 1, fichier); fwrite(&article1.prix, sizeof(double), 1, fichier); if (fclose(fichier)) printf("Le fichier n'a pas ete correctement ecrit.\n"); } . . .

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

Traitement des fichiers binaires en C


Alignement de structures solution 2: forcer lalignement sur des octets.
. . . #pragma pack(push, 1) // Spcifique Visual C++ typedef struct { char code; short taille; double prix; } article; #pragma pack(pop) // Spcifique Visual C++ . . . fwrite(&article1, sizeof(article), 1, fichier); . . . typedef struct { char code; short taille; double prix; } article article article1 = {'A', 42, 25.50};
Analyse et programmation 2 - Le traitement de fichiers 38

Mmorise les options dalignement sur une pile Force lalignement des variables sur 1 octet.

Rcupre les options dalignement depuis la pile

Traitement des fichiers binaires en C


Lecture

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

Traitement des fichiers binaires en C


Lecture exemple typique
#include <stdio.h> #pragma pack(push, 1) // Spcifique Visual C++ typedef d f struct { char code; short taille; double prix; } article; #pragma pack(pop) // Spcifique Visual C++ int main() { FILE * fichier; article articles[3]; fichier = fopen("articles.raw", "rb"); if (fichier != NULL) { fread(articles, sizeof(article), 3, fichier); 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 40

Traitement des fichiers binaires en C


Grer la position courante de lecture/criture dans le fichier ftell
long ftell(FILE* file); Retourne la position courante par rapport au dbut du fichier. Exprime en octets par rapport au dbut, le premier = 0.

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.

Rsultat: 0 en cas de succs, diffrent de 0 sinon.

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

Traitement des fichiers binaires en C


Grer la position courante de lecture/criture dans le fichier

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

Traitement des fichiers en C


Autres oprations sur les fichiers

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)

Analyse et programmation 2 - Le traitement de fichiers

43

22

Application rpandue des fichiers binaires


Les fichiers sonores (.wav) - structure

E En-tte

Donnes

Analyse et programmation 2 - Le traitement de fichiers

44

Application rpandue des fichiers binaires


Les fichiers sonores (.wav) en-tte

Analyse et programmation 2 - Le traitement de fichiers

45

23

Application rpandue des fichiers binaires


Les fichiers sonores (.wav) en-tte reprsentation en C
typedef struct { char riff[4]; // must contain "RIFF" long length; // must contain total length of file - 8 char wav[4]; // must contain "WAVE" } RIFF_HEADER; typedef struct { char fmt[4]; // must contain "fmt " long length; // must contain 0x10 short audio_format; // must contain 1 for PCM short channel_number; // 1 = mono, 2 = stereo, ... long sample_rate; // in Hz long byte_rate; // == sample_rate * channel_number * BitsPerSample/8 short bytes_per_sample; // 1=8 bit Mono, 2=8 bit Stereo or 16 bit Mono, 4=16 bit Stereo short bits_per_sample; // = 8, 16 } FORMAT_HEADER; typedef struct { char data[4] ; // must contain data long length; // length of data; } DATA_HEADER; typedef struct { RIFF_HEADER riff; FORMAT_HEADER format; DATA_HEADER data; } WAV_HEADER; void wav_prepare_header(WAV_HEADER * header, int channel_number, int sample_rate_hz, int sample_count, int bits_per_sample); Analyse et programmation 2 - Le traitement de fichiers 46

Application rpandue des fichiers binaires


Les fichiers sonores (.wav) les chantillons (donnes du son)

Analyse et programmation 2 - Le traitement de fichiers

47

24

Application rpandue des fichiers binaires


Les fichiers image Bitmaps (.bmp)

Format gnral
En-tte du fichier BitmapFileHeader En-tte de limage BitmapInfoHeader Palette optionnelle RGBQUAD[] Q []

Cas des photos 24 bits RGB


En-tte du fichier BitmapFileHeader En-tte de limage BitmapInfoHeader

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

Analyse et programmation 2 - Le traitement de fichiers

Application rpandue des fichiers binaires


Les fichiers image Bitmaps (.bmp) les structures
typedef struct { WORD bfType; DWORD bfSize; WORD bfReserved1; WORD bfReserved2; DWORD bfOffBits; } BITMAPFILEHEADER; typedef struct { DWORD biSize; LONG biWidth; LONG biHeight; WORD biPlanes; WORD biBitCount; DWORD biCompression; DWORD biSizeImage; LONG biXPelsPerMeter; LONG biYPelsPerMeter; DWORD biClrUsed; DWORD biClrImportant; } BITMAPINFOHEADER;
Analyse et programmation 2 - Le traitement de fichiers 49

25

Application rpandue des fichiers binaires


Les fichiers image Bitmaps (.bmp) - lecture
BITMAPFILEHEADER fileHeader; BITMAPINFOHEADER infoHeader; int data_size; data si e unsigned char * data; FILE * source; source = fopen("Aletsch.bmp", "rb"); if (source != NULL) { fread(&fileHeader, sizeof(fileHeader), 1, source); fread(&infoHeader, sizeof(infoHeader), 1, source); data size data_s e = fileHeader.bfSize e eade .b S e - s sizeof(fileHeader) eo ( e eade ) sizeof(infoHeader); data = malloc(data_size); fread(data, 1, data_size, source); fclose(source); }

Analyse et programmation 2 - Le traitement de fichiers

50

Application rpandue des fichiers binaires


Les fichiers image Bitmaps (.bmp)

Magic number BM : 0x4D42 = 19778

Analyse et programmation 2 - Le traitement de fichiers

51

26

Application rpandue des fichiers binaires


Traitement dimage

Comment transformer une image ?

Analyse et programmation 2 - Le traitement de fichiers

52

Application rpandue des fichiers binaires


Les bases de donnes

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

Analyse et programmation 2 - Le traitement de fichiers

53

27

Application rpandue des fichiers binaires


Les bases de donnes Exemple lmentaire

Analyse et programmation 2 - Le traitement de fichiers

54

Retour sur la fonction main


Les paramtres de la ligne de commande - principe

Utilit des paramtres en ligne de commande


Communiquer Comm niq er une ne information un n programme programme.
Notepad fichier1.txt

Modifier son comportement


dir /s

Analyse et programmation 2 - Le traitement de fichiers

55

28

Retour sur la fonction main


Les paramtres de la ligne de commande - principe

Taps sur la ligne de commande lors du lancement.

Analyse et programmation 2 - Le traitement de fichiers

56

Retour sur la fonction main


Les paramtres de la ligne de commande - principe

Saisis dans un raccourci.

Analyse et programmation 2 - Le traitement de fichiers

57

29

Retour sur la fonction main


Les paramtres de la ligne de commande - principe

Introduits dans les options de debug dans Visual Studio

Analyse et programmation 2 - Le traitement de fichiers

58

Retour sur la fonction main


Les paramtres de la ligne de commande gestion en langage C

Ils sont passs en paramtre la fonction main


Dans ce cas cas, les indiquer dans le prototype de main main.

Exemple
#include <stdio.h> int main(int argc, char* argv[]) { int i;

Nombre darguments

Valeurs des arguments (tableau de chanes de caractres)

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)

Lutilisation des p paramtres de la ligne g de commande.

Analyse et programmation 2 - Le traitement de fichiers

60

Vos questions

Analyse et programmation 2 - Le traitement de fichiers

61

31

Vous aimerez peut-être aussi