53

Algorithmes et programmation II : La gestion des fichiers...Algorithmes et programmation II : La gestion des chiers Souheib Baarir 1 1 Université Paris Ouest Nanterre La Défense

  • Upload
    others

  • View
    9

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Algorithmes et programmation II : La gestion des fichiers...Algorithmes et programmation II : La gestion des chiers Souheib Baarir 1 1 Université Paris Ouest Nanterre La Défense

Algorithmes et programmation II :La gestion des �chiers

Souheib Baarir1

1Université Paris Ouest Nanterre La Défense.

Laboratoire d'informatique de Paris 6.

[email protected]

Licence Mia - 2010/2011

S. Baarir (Paris10/LIP6) La gestion des �chiers L2 Mia - 2010/2011 1 / 33

Page 2: Algorithmes et programmation II : La gestion des fichiers...Algorithmes et programmation II : La gestion des chiers Souheib Baarir 1 1 Université Paris Ouest Nanterre La Défense

Grandes lignes du cours

Introduction sur les �chiers

Les �chiers et le language CLa structure FILEOuverture et fermeture d'un �chierLes entrées-sorties textesLes entrées-sorties binairesLes accès directes

S. Baarir (Paris10/LIP6) La gestion des �chiers L2 Mia - 2010/2011 2 / 33

Page 3: Algorithmes et programmation II : La gestion des fichiers...Algorithmes et programmation II : La gestion des chiers Souheib Baarir 1 1 Université Paris Ouest Nanterre La Défense

Introduction sur les �chiers

Introduction sur les �chiers

Les �chiers et le language CLa structure FILEOuverture et fermeture d'un �chierLes entrées-sorties textesLes entrées-sorties binairesLes accès directes

S. Baarir (Paris10/LIP6) La gestion des �chiers L2 Mia - 2010/2011 3 / 33

Page 4: Algorithmes et programmation II : La gestion des fichiers...Algorithmes et programmation II : La gestion des chiers Souheib Baarir 1 1 Université Paris Ouest Nanterre La Défense

Besoin des �chiers

I Jusqu'à maintenant nous n'avions vu que des Entrées/Sorties(E/S) sous la forme d'entrée standard (usuellement le clavier,scanf) et de sortie standard (usuellement l'écran, printf).

I Ce type d'E/S atteint rapidement ses limites...

Utilisation des �chiers : sauvegarde/restitution desdonnées entre le programme et le disque dur.

S. Baarir (Paris10/LIP6) La gestion des �chiers L2 Mia - 2010/2011 4 / 33

Page 5: Algorithmes et programmation II : La gestion des fichiers...Algorithmes et programmation II : La gestion des chiers Souheib Baarir 1 1 Université Paris Ouest Nanterre La Défense

Besoin des �chiers

I Jusqu'à maintenant nous n'avions vu que des Entrées/Sorties(E/S) sous la forme d'entrée standard (usuellement le clavier,scanf) et de sortie standard (usuellement l'écran, printf).

I Ce type d'E/S atteint rapidement ses limites...

Utilisation des �chiers : sauvegarde/restitution desdonnées entre le programme et le disque dur.

S. Baarir (Paris10/LIP6) La gestion des �chiers L2 Mia - 2010/2011 4 / 33

Page 6: Algorithmes et programmation II : La gestion des fichiers...Algorithmes et programmation II : La gestion des chiers Souheib Baarir 1 1 Université Paris Ouest Nanterre La Défense

Besoin des �chiers

I Jusqu'à maintenant nous n'avions vu que des Entrées/Sorties(E/S) sous la forme d'entrée standard (usuellement le clavier,scanf) et de sortie standard (usuellement l'écran, printf).

I Ce type d'E/S atteint rapidement ses limites...

Utilisation des �chiers : sauvegarde/restitution desdonnées entre le programme et le disque dur.

S. Baarir (Paris10/LIP6) La gestion des �chiers L2 Mia - 2010/2011 4 / 33

Page 7: Algorithmes et programmation II : La gestion des fichiers...Algorithmes et programmation II : La gestion des chiers Souheib Baarir 1 1 Université Paris Ouest Nanterre La Défense

Besoin des �chiers

I Jusqu'à maintenant nous n'avions vu que des Entrées/Sorties(E/S) sous la forme d'entrée standard (usuellement le clavier,scanf) et de sortie standard (usuellement l'écran, printf).

I Ce type d'E/S atteint rapidement ses limites...

Utilisation des �chiers : sauvegarde/restitution desdonnées entre le programme et le disque dur.

S. Baarir (Paris10/LIP6) La gestion des �chiers L2 Mia - 2010/2011 4 / 33

Page 8: Algorithmes et programmation II : La gestion des fichiers...Algorithmes et programmation II : La gestion des chiers Souheib Baarir 1 1 Université Paris Ouest Nanterre La Défense

Types de �chiers

Il existe deux types de �chiers (dé�nitions Wikipédia) :

I Les �chiers textes : sont les �chiers dont le contenureprésente uniquement une suite de caractèresimprimables, d'espaces et de retours à la ligne (.txt,...). Ilspeuvent être lus directement par un éditeur de texte.

I Les �chiers binaires : sont les �chiers qui ne sont pasassimilables à des �chiers textes (.exe, .mp3, .png,.doc,...). Ils ne peuvent pas être lus directement par unéditeur de texte .

S. Baarir (Paris10/LIP6) La gestion des �chiers L2 Mia - 2010/2011 5 / 33

Page 9: Algorithmes et programmation II : La gestion des fichiers...Algorithmes et programmation II : La gestion des chiers Souheib Baarir 1 1 Université Paris Ouest Nanterre La Défense

Types de �chiers

Il existe deux types de �chiers (dé�nitions Wikipédia) :

I Les �chiers textes : sont les �chiers dont le contenureprésente uniquement une suite de caractèresimprimables, d'espaces et de retours à la ligne (.txt,...). Ilspeuvent être lus directement par un éditeur de texte.

I Les �chiers binaires : sont les �chiers qui ne sont pasassimilables à des �chiers textes (.exe, .mp3, .png,.doc,...). Ils ne peuvent pas être lus directement par unéditeur de texte .

S. Baarir (Paris10/LIP6) La gestion des �chiers L2 Mia - 2010/2011 5 / 33

Page 10: Algorithmes et programmation II : La gestion des fichiers...Algorithmes et programmation II : La gestion des chiers Souheib Baarir 1 1 Université Paris Ouest Nanterre La Défense

Types de �chiers

Il existe deux types de �chiers (dé�nitions Wikipédia) :

I Les �chiers textes : sont les �chiers dont le contenureprésente uniquement une suite de caractèresimprimables, d'espaces et de retours à la ligne (.txt,...). Ilspeuvent être lus directement par un éditeur de texte.

I Les �chiers binaires : sont les �chiers qui ne sont pasassimilables à des �chiers textes (.exe, .mp3, .png,.doc,...). Ils ne peuvent pas être lus directement par unéditeur de texte .

S. Baarir (Paris10/LIP6) La gestion des �chiers L2 Mia - 2010/2011 5 / 33

Page 11: Algorithmes et programmation II : La gestion des fichiers...Algorithmes et programmation II : La gestion des chiers Souheib Baarir 1 1 Université Paris Ouest Nanterre La Défense

Mécanique de l'utilisation des �chiers (1/2)

I L'accès à un �chier d'un support de stockage de masse (disquedur, disque optique,...) est coûteux : temps des transfers,mécanique détériorable,...

I Donc, il faut réduire le nombre d'accès ⇒ Utilisation d'unezone mémoire appelée : zone tampon (�bu�er�).

I Ainsi, une instruction d'écriture (resp. lecture) dans leprogramme ne se traduira pas immédiatement par une écriture(resp. lecture) sur le disque mais par une �écriture (resp.lecture)� dans le bu�er, avec écriture (resp. lecture) surdisque quand le bu�er est plein (resp. vide).

S. Baarir (Paris10/LIP6) La gestion des �chiers L2 Mia - 2010/2011 6 / 33

Page 12: Algorithmes et programmation II : La gestion des fichiers...Algorithmes et programmation II : La gestion des chiers Souheib Baarir 1 1 Université Paris Ouest Nanterre La Défense

Mécanique de l'utilisation des �chiers (1/2)

I L'accès à un �chier d'un support de stockage de masse (disquedur, disque optique,...) est coûteux : temps des transfers,mécanique détériorable,...

I Donc, il faut réduire le nombre d'accès

⇒ Utilisation d'unezone mémoire appelée : zone tampon (�bu�er�).

I Ainsi, une instruction d'écriture (resp. lecture) dans leprogramme ne se traduira pas immédiatement par une écriture(resp. lecture) sur le disque mais par une �écriture (resp.lecture)� dans le bu�er, avec écriture (resp. lecture) surdisque quand le bu�er est plein (resp. vide).

S. Baarir (Paris10/LIP6) La gestion des �chiers L2 Mia - 2010/2011 6 / 33

Page 13: Algorithmes et programmation II : La gestion des fichiers...Algorithmes et programmation II : La gestion des chiers Souheib Baarir 1 1 Université Paris Ouest Nanterre La Défense

Mécanique de l'utilisation des �chiers (1/2)

I L'accès à un �chier d'un support de stockage de masse (disquedur, disque optique,...) est coûteux : temps des transfers,mécanique détériorable,...

I Donc, il faut réduire le nombre d'accès ⇒ Utilisation d'unezone mémoire appelée : zone tampon (�bu�er�).

I Ainsi, une instruction d'écriture (resp. lecture) dans leprogramme ne se traduira pas immédiatement par une écriture(resp. lecture) sur le disque mais par une �écriture (resp.lecture)� dans le bu�er, avec écriture (resp. lecture) surdisque quand le bu�er est plein (resp. vide).

S. Baarir (Paris10/LIP6) La gestion des �chiers L2 Mia - 2010/2011 6 / 33

Page 14: Algorithmes et programmation II : La gestion des fichiers...Algorithmes et programmation II : La gestion des chiers Souheib Baarir 1 1 Université Paris Ouest Nanterre La Défense

Mécanique de l'utilisation des �chiers (1/2)

I L'accès à un �chier d'un support de stockage de masse (disquedur, disque optique,...) est coûteux : temps des transfers,mécanique détériorable,...

I Donc, il faut réduire le nombre d'accès ⇒ Utilisation d'unezone mémoire appelée : zone tampon (�bu�er�).

I Ainsi, une instruction d'écriture (resp. lecture) dans leprogramme ne se traduira pas immédiatement par une écriture(resp. lecture) sur le disque mais par une �écriture (resp.lecture)� dans le bu�er, avec écriture (resp. lecture) surdisque quand le bu�er est plein (resp. vide).

S. Baarir (Paris10/LIP6) La gestion des �chiers L2 Mia - 2010/2011 6 / 33

Page 15: Algorithmes et programmation II : La gestion des fichiers...Algorithmes et programmation II : La gestion des chiers Souheib Baarir 1 1 Université Paris Ouest Nanterre La Défense

Mécanique de l'utilisation des �chiers (2/2)

Dans mon programme

, le système d'exploitation fait

:I Ouvrir un �chier.

⇒ créer un bu�er (b) dans la RAM.

I Lire/écrire dans le �chier ouvert.

⇒ lire/écrire dans b.

I Fermer le �chier.

⇒ ��usher� le contenu de b, libérer b,...

S. Baarir (Paris10/LIP6) La gestion des �chiers L2 Mia - 2010/2011 7 / 33

Page 16: Algorithmes et programmation II : La gestion des fichiers...Algorithmes et programmation II : La gestion des chiers Souheib Baarir 1 1 Université Paris Ouest Nanterre La Défense

Mécanique de l'utilisation des �chiers (2/2)

Dans mon programme , le système d'exploitation fait :I Ouvrir un �chier.

⇒ créer un bu�er (b) dans la RAM.I Lire/écrire dans le �chier ouvert.

⇒ lire/écrire dans b.

I Fermer le �chier.

⇒ ��usher� le contenu de b, libérer b,...

S. Baarir (Paris10/LIP6) La gestion des �chiers L2 Mia - 2010/2011 7 / 33

Page 17: Algorithmes et programmation II : La gestion des fichiers...Algorithmes et programmation II : La gestion des chiers Souheib Baarir 1 1 Université Paris Ouest Nanterre La Défense

Mécanique de l'utilisation des �chiers (2/2)

Dans mon programme , le système d'exploitation fait :I Ouvrir un �chier.

⇒ créer un bu�er (b) dans la RAM.I Lire/écrire dans le �chier ouvert.

⇒ lire/écrire dans b.I Fermer le �chier.

⇒ ��usher� le contenu de b, libérer b,...

S. Baarir (Paris10/LIP6) La gestion des �chiers L2 Mia - 2010/2011 7 / 33

Page 18: Algorithmes et programmation II : La gestion des fichiers...Algorithmes et programmation II : La gestion des chiers Souheib Baarir 1 1 Université Paris Ouest Nanterre La Défense

Mécanique de l'utilisation des �chiers (2/2)

Dans mon programme , le système d'exploitation fait :I Ouvrir un �chier.

⇒ créer un bu�er (b) dans la RAM.I Lire/écrire dans le �chier ouvert.

⇒ lire/écrire dans b.I Fermer le �chier.

⇒ ��usher� le contenu de b, libérer b,...

S. Baarir (Paris10/LIP6) La gestion des �chiers L2 Mia - 2010/2011 7 / 33

Page 19: Algorithmes et programmation II : La gestion des fichiers...Algorithmes et programmation II : La gestion des chiers Souheib Baarir 1 1 Université Paris Ouest Nanterre La Défense

Les �chiers et le language C

Introduction sur les �chiers

Les �chiers et le language CLa structure FILEOuverture et fermeture d'un �chierLes entrées-sorties textesLes entrées-sorties binairesLes accès directes

S. Baarir (Paris10/LIP6) La gestion des �chiers L2 Mia - 2010/2011 8 / 33

Page 20: Algorithmes et programmation II : La gestion des fichiers...Algorithmes et programmation II : La gestion des chiers Souheib Baarir 1 1 Université Paris Ouest Nanterre La Défense

Outline

Introduction sur les �chiers

Les �chiers et le language CLa structure FILEOuverture et fermeture d'un �chierLes entrées-sorties textesLes entrées-sorties binairesLes accès directes

S. Baarir (Paris10/LIP6) La gestion des �chiers L2 Mia - 2010/2011 9 / 33

Page 21: Algorithmes et programmation II : La gestion des fichiers...Algorithmes et programmation II : La gestion des chiers Souheib Baarir 1 1 Université Paris Ouest Nanterre La Défense

La structure FILE

Introduction sur les �chiers

Les �chiers et le language CLa structure FILEOuverture et fermeture d'un �chierLes entrées-sorties textesLes entrées-sorties binairesLes accès directes

S. Baarir (Paris10/LIP6) La gestion des �chiers L2 Mia - 2010/2011 10 / 33

Page 22: Algorithmes et programmation II : La gestion des fichiers...Algorithmes et programmation II : La gestion des chiers Souheib Baarir 1 1 Université Paris Ouest Nanterre La Défense

La structure FILE

I En langage C, les informations nécessaires à maintenirl'association programme ⇔ bu�er ⇔ disque dursont décrites dans une structure FILE (stdio.h).

I Parmi les informations stockées dans la structure FILE , ontrouve :

I le N�du �chier à ouvrir,I le type d'ouverture (lecture/écriture),I l'adresse du bu�er associé,I la position du curseur de lecture,I la position du curseur d'écriture,I ...

I Pour utiliser un �chier, il faut donc commencer par déclarerune variable de type FILE, ou plus exactement un pointeur surFILE (FILE *), qu'on appel aussi �ux de données :

FILE * nomPointeurFichier ;

S. Baarir (Paris10/LIP6) La gestion des �chiers L2 Mia - 2010/2011 11 / 33

Page 23: Algorithmes et programmation II : La gestion des fichiers...Algorithmes et programmation II : La gestion des chiers Souheib Baarir 1 1 Université Paris Ouest Nanterre La Défense

La structure FILE

I En langage C, les informations nécessaires à maintenirl'association programme ⇔ bu�er ⇔ disque dursont décrites dans une structure FILE (stdio.h).

I Parmi les informations stockées dans la structure FILE , ontrouve :

I le N�du �chier à ouvrir,I le type d'ouverture (lecture/écriture),I l'adresse du bu�er associé,I la position du curseur de lecture,I la position du curseur d'écriture,I ...

I Pour utiliser un �chier, il faut donc commencer par déclarerune variable de type FILE, ou plus exactement un pointeur surFILE (FILE *), qu'on appel aussi �ux de données :

FILE * nomPointeurFichier ;

S. Baarir (Paris10/LIP6) La gestion des �chiers L2 Mia - 2010/2011 11 / 33

Page 24: Algorithmes et programmation II : La gestion des fichiers...Algorithmes et programmation II : La gestion des chiers Souheib Baarir 1 1 Université Paris Ouest Nanterre La Défense

La structure FILE

I En langage C, les informations nécessaires à maintenirl'association programme ⇔ bu�er ⇔ disque dursont décrites dans une structure FILE (stdio.h).

I Parmi les informations stockées dans la structure FILE , ontrouve :

I le N�du �chier à ouvrir,I le type d'ouverture (lecture/écriture),I l'adresse du bu�er associé,I la position du curseur de lecture,I la position du curseur d'écriture,I ...

I Pour utiliser un �chier, il faut donc commencer par déclarerune variable de type FILE, ou plus exactement un pointeur surFILE (FILE *), qu'on appel aussi �ux de données :

FILE * nomPointeurFichier ;

S. Baarir (Paris10/LIP6) La gestion des �chiers L2 Mia - 2010/2011 11 / 33

Page 25: Algorithmes et programmation II : La gestion des fichiers...Algorithmes et programmation II : La gestion des chiers Souheib Baarir 1 1 Université Paris Ouest Nanterre La Défense

Outline

Introduction sur les �chiers

Les �chiers et le language CLa structure FILEOuverture et fermeture d'un �chierLes entrées-sorties textesLes entrées-sorties binairesLes accès directes

S. Baarir (Paris10/LIP6) La gestion des �chiers L2 Mia - 2010/2011 12 / 33

Page 26: Algorithmes et programmation II : La gestion des fichiers...Algorithmes et programmation II : La gestion des chiers Souheib Baarir 1 1 Université Paris Ouest Nanterre La Défense

Ouverture et fermeture d'un �chier

Introduction sur les �chiers

Les �chiers et le language CLa structure FILEOuverture et fermeture d'un �chierLes entrées-sorties textesLes entrées-sorties binairesLes accès directes

S. Baarir (Paris10/LIP6) La gestion des �chiers L2 Mia - 2010/2011 13 / 33

Page 27: Algorithmes et programmation II : La gestion des fichiers...Algorithmes et programmation II : La gestion des chiers Souheib Baarir 1 1 Université Paris Ouest Nanterre La Défense

fopen et fclose : de�nition

Le language C o�re deux fonctions pour l'ouverture et la fermetured'un �chier :

I La fonction fopen : permet d'ouvrir un �chier, suivant unmode, et retourne un �ux (pointeur sur FILE).

FILE * fopen(char* nomFichier, char* mode)

La fonction retourne NULL si l'ouverture n'est pas possible

I La fonction fclose : permet de fermer un �chier (un �ux)ouvert.

void fclose(FILE * pf)

S. Baarir (Paris10/LIP6) La gestion des �chiers L2 Mia - 2010/2011 14 / 33

Page 28: Algorithmes et programmation II : La gestion des fichiers...Algorithmes et programmation II : La gestion des chiers Souheib Baarir 1 1 Université Paris Ouest Nanterre La Défense

fopen et fclose : exemple

// Dé c l a r a t i o n du f l u xFILE ∗ f p ;

// Ouv r i r l e f i c h i e r . / t e s t . t e x t en é c r i t u r e// e t a s s o c i a t i o n au f l u xi f ( ( fp=fopen ( " . / t e s t . t e x t " , "w"))==NULL){

p r i n t f ( " Impo s s i b l e d ' o u v r i r l e f i c h i e r \n" ) ;return −1;

}

. . .

// Fermeture du f l u x ( du f i c h i e r )f c l o s e ( fp ) ;

S. Baarir (Paris10/LIP6) La gestion des �chiers L2 Mia - 2010/2011 15 / 33

Page 29: Algorithmes et programmation II : La gestion des fichiers...Algorithmes et programmation II : La gestion des chiers Souheib Baarir 1 1 Université Paris Ouest Nanterre La Défense

Les cas stdin, stdout, et stderr

Trois �ux standards peuvent être utilisés en C sans ouverture, nifermeture :

I stdin (standard input) : par défaut le clavier ;I stdout (standard output) : par défaut l'écran ;I stderr (standard error) : par défaut l'écran ;

S. Baarir (Paris10/LIP6) La gestion des �chiers L2 Mia - 2010/2011 16 / 33

Page 30: Algorithmes et programmation II : La gestion des fichiers...Algorithmes et programmation II : La gestion des chiers Souheib Baarir 1 1 Université Paris Ouest Nanterre La Défense

Les modes d'ouvertures

Les di�érents modes d'ouvertures d'un �chier sont :

Mode Signi�cation"r" ouverture d'un �chier texte en lecture"w" ouverture d'un �chier texte en écriture"a" ouverture d'un �chier texte en écriture à la �n"rb" ouverture d'un �chier binaire en lecture"wb" ouverture d'un �chier binaire en écriture"ab" ouverture d'un �chier binaire en écriture à la �n"r+" ouverture d'un �chier texte en lecture/écriture"w+" ouverture d'un �chier texte en lecture/écriture"a+" ouverture d'un �chier texte en lecture/écriture à la �n"r+b" ouverture d'un �chier binaire en lecture/écriture"w+b" ouverture d'un �chier binaire en lecture/écriture"a+b" ouverture d'un �chier binaire en lecture/écriture à la �n

S. Baarir (Paris10/LIP6) La gestion des �chiers L2 Mia - 2010/2011 17 / 33

Page 31: Algorithmes et programmation II : La gestion des fichiers...Algorithmes et programmation II : La gestion des chiers Souheib Baarir 1 1 Université Paris Ouest Nanterre La Défense

Outline

Introduction sur les �chiers

Les �chiers et le language CLa structure FILEOuverture et fermeture d'un �chierLes entrées-sorties textesLes entrées-sorties binairesLes accès directes

S. Baarir (Paris10/LIP6) La gestion des �chiers L2 Mia - 2010/2011 18 / 33

Page 32: Algorithmes et programmation II : La gestion des fichiers...Algorithmes et programmation II : La gestion des chiers Souheib Baarir 1 1 Université Paris Ouest Nanterre La Défense

Les entrées-sorties textes

Introduction sur les �chiers

Les �chiers et le language CLa structure FILEOuverture et fermeture d'un �chierLes entrées-sorties textesLes entrées-sorties binairesLes accès directes

S. Baarir (Paris10/LIP6) La gestion des �chiers L2 Mia - 2010/2011 19 / 33

Page 33: Algorithmes et programmation II : La gestion des fichiers...Algorithmes et programmation II : La gestion des chiers Souheib Baarir 1 1 Université Paris Ouest Nanterre La Défense

getc, putc, fscanf et fprintf : de�nition (1/2)

Plusieurs fonctions pour la lecture/écriture depuis/dans les �chierstextes existent :

I int getc(FILE * pf) : retourne le caractère suivant du �uxpf. Elle retourne la constante EOF si elle rencontre la �n du�chier ou en cas d'erreur.

I int putc(int c, FILE * pf) : écrit le caractère c dans le�chier associé àpf. Retourne le caractère écrit ou EOF en casd'erreur.

Remarques :

I getchar() ⇔ getc(stdin)

I putchar(c) ⇔ putc(c,stdout)

S. Baarir (Paris10/LIP6) La gestion des �chiers L2 Mia - 2010/2011 20 / 33

Page 34: Algorithmes et programmation II : La gestion des fichiers...Algorithmes et programmation II : La gestion des chiers Souheib Baarir 1 1 Université Paris Ouest Nanterre La Défense

getc, putc, fscanf et fprintf : de�nition (1/2)

Plusieurs fonctions pour la lecture/écriture depuis/dans les �chierstextes existent :

I int getc(FILE * pf) : retourne le caractère suivant du �uxpf. Elle retourne la constante EOF si elle rencontre la �n du�chier ou en cas d'erreur.

I int putc(int c, FILE * pf) : écrit le caractère c dans le�chier associé àpf. Retourne le caractère écrit ou EOF en casd'erreur.

Remarques :

I getchar() ⇔ getc(stdin)

I putchar(c) ⇔ putc(c,stdout)

S. Baarir (Paris10/LIP6) La gestion des �chiers L2 Mia - 2010/2011 20 / 33

Page 35: Algorithmes et programmation II : La gestion des fichiers...Algorithmes et programmation II : La gestion des chiers Souheib Baarir 1 1 Université Paris Ouest Nanterre La Défense

getc, putc, fscanf et fprintf : de�nition (1/2)

Plusieurs fonctions pour la lecture/écriture depuis/dans les �chierstextes existent :

I int getc(FILE * pf) : retourne le caractère suivant du �uxpf. Elle retourne la constante EOF si elle rencontre la �n du�chier ou en cas d'erreur.

I int putc(int c, FILE * pf) : écrit le caractère c dans le�chier associé àpf. Retourne le caractère écrit ou EOF en casd'erreur.

Remarques :

I getchar() ⇔ getc(stdin)

I putchar(c) ⇔ putc(c,stdout)

S. Baarir (Paris10/LIP6) La gestion des �chiers L2 Mia - 2010/2011 20 / 33

Page 36: Algorithmes et programmation II : La gestion des fichiers...Algorithmes et programmation II : La gestion des chiers Souheib Baarir 1 1 Université Paris Ouest Nanterre La Défense

getc, putc, fscanf et fprintf : de�nition (1/2)

Plusieurs fonctions pour la lecture/écriture depuis/dans les �chierstextes existent :

I int getc(FILE * pf) : retourne le caractère suivant du �uxpf. Elle retourne la constante EOF si elle rencontre la �n du�chier ou en cas d'erreur.

I int putc(int c, FILE * pf) : écrit le caractère c dans le�chier associé àpf. Retourne le caractère écrit ou EOF en casd'erreur.

Remarques :

I getchar() ⇔ getc(stdin)

I putchar(c) ⇔ putc(c,stdout)

S. Baarir (Paris10/LIP6) La gestion des �chiers L2 Mia - 2010/2011 20 / 33

Page 37: Algorithmes et programmation II : La gestion des fichiers...Algorithmes et programmation II : La gestion des chiers Souheib Baarir 1 1 Université Paris Ouest Nanterre La Défense

getc, putc, fscanf et fprintf : de�nition (2/2)

I int fgetf(FILE * pf, char * format, arg1,...) : litles caractères sur le �ux pf, les interprète selon laspéci�cations incluses dans format. Retourne le nombred'éléments correctement lus ou EOF en cas d'erreur (avanttoutes les lectures).

I int fprintf(FILE * pf, char * format, arg1,...) :convertit, met en forme (selon format) et imprime sesarguments dans le �ux pf. Retourne le nombre de caractèresimprimés ou EOF en cas d'erreur.

Remarques :

I scanf(char * format,...) ⇔fscanf(stdin, char * format,...)

I printf(char * format,...) ⇔fprintf(stdout, char * format,...)

S. Baarir (Paris10/LIP6) La gestion des �chiers L2 Mia - 2010/2011 21 / 33

Page 38: Algorithmes et programmation II : La gestion des fichiers...Algorithmes et programmation II : La gestion des chiers Souheib Baarir 1 1 Université Paris Ouest Nanterre La Défense

getc, putc, fscanf et fprintf : de�nition (2/2)

I int fgetf(FILE * pf, char * format, arg1,...) : litles caractères sur le �ux pf, les interprète selon laspéci�cations incluses dans format. Retourne le nombred'éléments correctement lus ou EOF en cas d'erreur (avanttoutes les lectures).

I int fprintf(FILE * pf, char * format, arg1,...) :convertit, met en forme (selon format) et imprime sesarguments dans le �ux pf. Retourne le nombre de caractèresimprimés ou EOF en cas d'erreur.

Remarques :

I scanf(char * format,...) ⇔fscanf(stdin, char * format,...)

I printf(char * format,...) ⇔fprintf(stdout, char * format,...)

S. Baarir (Paris10/LIP6) La gestion des �chiers L2 Mia - 2010/2011 21 / 33

Page 39: Algorithmes et programmation II : La gestion des fichiers...Algorithmes et programmation II : La gestion des chiers Souheib Baarir 1 1 Université Paris Ouest Nanterre La Défense

getc, putc, fscanf et fprintf : de�nition (2/2)

I int fgetf(FILE * pf, char * format, arg1,...) : litles caractères sur le �ux pf, les interprète selon laspéci�cations incluses dans format. Retourne le nombred'éléments correctement lus ou EOF en cas d'erreur (avanttoutes les lectures).

I int fprintf(FILE * pf, char * format, arg1,...) :convertit, met en forme (selon format) et imprime sesarguments dans le �ux pf. Retourne le nombre de caractèresimprimés ou EOF en cas d'erreur.

Remarques :

I scanf(char * format,...) ⇔fscanf(stdin, char * format,...)

I printf(char * format,...) ⇔fprintf(stdout, char * format,...)

S. Baarir (Paris10/LIP6) La gestion des �chiers L2 Mia - 2010/2011 21 / 33

Page 40: Algorithmes et programmation II : La gestion des fichiers...Algorithmes et programmation II : La gestion des chiers Souheib Baarir 1 1 Université Paris Ouest Nanterre La Défense

getc, putc, fscanf et fprintf : de�nition (2/2)

I int fgetf(FILE * pf, char * format, arg1,...) : litles caractères sur le �ux pf, les interprète selon laspéci�cations incluses dans format. Retourne le nombred'éléments correctement lus ou EOF en cas d'erreur (avanttoutes les lectures).

I int fprintf(FILE * pf, char * format, arg1,...) :convertit, met en forme (selon format) et imprime sesarguments dans le �ux pf. Retourne le nombre de caractèresimprimés ou EOF en cas d'erreur.

Remarques :

I scanf(char * format,...) ⇔fscanf(stdin, char * format,...)

I printf(char * format,...) ⇔fprintf(stdout, char * format,...)

S. Baarir (Paris10/LIP6) La gestion des �chiers L2 Mia - 2010/2011 21 / 33

Page 41: Algorithmes et programmation II : La gestion des fichiers...Algorithmes et programmation II : La gestion des chiers Souheib Baarir 1 1 Université Paris Ouest Nanterre La Défense

getc, putc, fscanf et fprintf : exemple

i n t main ( i n t arv , char ∗ arg [ ] ) {FILE ∗ in , ∗ out ;i n t c ;i f ( ( i n = fopen ( " e n t r e e . t x t " , " r " ) ) == NULL) {

f p r i n t f ( s t d e r r , "\ nE r r eu r : Impo s s i b l e de l i r e " ) ;return (−1);

}

i f ( ( out = fopen ( " s o r t i e . t x t " , "w" ) ) == NULL) {f p r i n t f ( s t d e r r , "\ nE r r eu r : Impo s s i b l e d ' é c r i r e " ) ;return (−1);

}

while ( ( c = ge tc ( i n ) ) != EOF)putc ( c , out ) ;

f c l o s e ( i n ) ; f c l o s e ( out ) ;return ( 0 ) ;

}S. Baarir (Paris10/LIP6) La gestion des �chiers L2 Mia - 2010/2011 22 / 33

Page 42: Algorithmes et programmation II : La gestion des fichiers...Algorithmes et programmation II : La gestion des chiers Souheib Baarir 1 1 Université Paris Ouest Nanterre La Défense

Outline

Introduction sur les �chiers

Les �chiers et le language CLa structure FILEOuverture et fermeture d'un �chierLes entrées-sorties textesLes entrées-sorties binairesLes accès directes

S. Baarir (Paris10/LIP6) La gestion des �chiers L2 Mia - 2010/2011 23 / 33

Page 43: Algorithmes et programmation II : La gestion des fichiers...Algorithmes et programmation II : La gestion des chiers Souheib Baarir 1 1 Université Paris Ouest Nanterre La Défense

Les entrées-sorties binaires

Introduction sur les �chiers

Les �chiers et le language CLa structure FILEOuverture et fermeture d'un �chierLes entrées-sorties textesLes entrées-sorties binairesLes accès directes

S. Baarir (Paris10/LIP6) La gestion des �chiers L2 Mia - 2010/2011 24 / 33

Page 44: Algorithmes et programmation II : La gestion des fichiers...Algorithmes et programmation II : La gestion des chiers Souheib Baarir 1 1 Université Paris Ouest Nanterre La Défense

fread, fwrite : de�nition

Plusieurs fonctions pour la lecture/écriture depuis/dans les �chiersbinaires existent :

I size_t fread(void * pointeur, size_t taille,

size_t nombre, FILE * pf) :lit un tableau de nombre éléments, chacun de taille taille,depuis le �ux pf, et le stocke dans la zone pointée parpointeur. Le nombre total d'éléments lus sont retournés.

I size_t fwrite(void *pointeur, size_t taille,

size_t nombre, FILE * pf) :écrit un tableau de nombre éléments, chacun de taille taille,depuis la zone pointée par pointeur vers le �chier associé au�ux pf. Le nombre total de bytes écrits sont retournés.

S. Baarir (Paris10/LIP6) La gestion des �chiers L2 Mia - 2010/2011 25 / 33

Page 45: Algorithmes et programmation II : La gestion des fichiers...Algorithmes et programmation II : La gestion des chiers Souheib Baarir 1 1 Université Paris Ouest Nanterre La Défense

fread, fwrite : de�nition

Plusieurs fonctions pour la lecture/écriture depuis/dans les �chiersbinaires existent :

I size_t fread(void * pointeur, size_t taille,

size_t nombre, FILE * pf) :lit un tableau de nombre éléments, chacun de taille taille,depuis le �ux pf, et le stocke dans la zone pointée parpointeur. Le nombre total d'éléments lus sont retournés.

I size_t fwrite(void *pointeur, size_t taille,

size_t nombre, FILE * pf) :écrit un tableau de nombre éléments, chacun de taille taille,depuis la zone pointée par pointeur vers le �chier associé au�ux pf. Le nombre total de bytes écrits sont retournés.

S. Baarir (Paris10/LIP6) La gestion des �chiers L2 Mia - 2010/2011 25 / 33

Page 46: Algorithmes et programmation II : La gestion des fichiers...Algorithmes et programmation II : La gestion des chiers Souheib Baarir 1 1 Université Paris Ouest Nanterre La Défense

fread, fwrite : exemple

#include <s t d i o . h>#include <s t d l i b . h>#define NB 50i n t main ( i n t arv , char ∗ arg [ ] ) {

FILE ∗ in , ∗ out ;i n t tab1 [NB] , tab2 [NB ] ;i n t i ;

for ( i = 0 ; i < NB; i++)tab1 [ i ] = i ;

// é c r i t u r e du t ab l e a u dans s o r t i e . b i ni f ( ( out = fopen ( " . / s o r t i e . b i n " , "wb" ) ) == NULL) {

f p r i n t f ( s t d e r r , "\ n Impo s s i b l e d ' é c r i r e " ) ;return (−1);

}

f w r i t e ( tab1 , NB ∗ sizeof ( i n t ) , 1 , out ) ;f c l o s e ( out ) ;

S. Baarir (Paris10/LIP6) La gestion des �chiers L2 Mia - 2010/2011 26 / 33

Page 47: Algorithmes et programmation II : La gestion des fichiers...Algorithmes et programmation II : La gestion des chiers Souheib Baarir 1 1 Université Paris Ouest Nanterre La Défense

fread, fwrite : exemple (suite et �n)

// l e c t u r e dans s o r t i e . b i ni f ( ( i n = fopen ( . / s o r t i e . b in , " rb " ) ) == NULL) {

f p r i n t f ( s t d e r r , "\ n Impo s s i b l e de l i r e " ) ;return (−1);

}

f r e a d ( tab2 , NB ∗ sizeof ( i n t ) , 1 , i n ) ;f c l o s e ( i n ) ;

for ( i = 0 ; i < NB; i++)p r i n t f ( "%d\ t " , tab2 [ i ] ) ;

p r i n t f ( "\n" ) ;

return ( 0 ) ;}

S. Baarir (Paris10/LIP6) La gestion des �chiers L2 Mia - 2010/2011 27 / 33

Page 48: Algorithmes et programmation II : La gestion des fichiers...Algorithmes et programmation II : La gestion des chiers Souheib Baarir 1 1 Université Paris Ouest Nanterre La Défense

Outline

Introduction sur les �chiers

Les �chiers et le language CLa structure FILEOuverture et fermeture d'un �chierLes entrées-sorties textesLes entrées-sorties binairesLes accès directes

S. Baarir (Paris10/LIP6) La gestion des �chiers L2 Mia - 2010/2011 28 / 33

Page 49: Algorithmes et programmation II : La gestion des fichiers...Algorithmes et programmation II : La gestion des chiers Souheib Baarir 1 1 Université Paris Ouest Nanterre La Défense

Les accès directes

Introduction sur les �chiers

Les �chiers et le language CLa structure FILEOuverture et fermeture d'un �chierLes entrées-sorties textesLes entrées-sorties binairesLes accès directes

S. Baarir (Paris10/LIP6) La gestion des �chiers L2 Mia - 2010/2011 29 / 33

Page 50: Algorithmes et programmation II : La gestion des fichiers...Algorithmes et programmation II : La gestion des chiers Souheib Baarir 1 1 Université Paris Ouest Nanterre La Défense

ftell, fseek : dé�nition

Le langage C permet un accès directe au données d'un �chier.

I

int fseek (FILE * pf, long int offset, int origine) :a�ecte l'indicateur de position associé à pf, par la positionoffset + origine.

I pf : pointeur sur FILE identi�ant le �ux.I offset : nombre de bytes à partir de origine.I origine : position à partir de laquelle offset est ajouté.

Peut-être spéci�é par l'une des constantes suivantes,I SEEK_SET Début du �chierI SEEK_CUR Position courante du pointeurI SEEK_END Fin du �chier.

I long int ftell ( FILE * pf ) : retourne la valeur actuellede l'indicateur de position.

S. Baarir (Paris10/LIP6) La gestion des �chiers L2 Mia - 2010/2011 30 / 33

Page 51: Algorithmes et programmation II : La gestion des fichiers...Algorithmes et programmation II : La gestion des chiers Souheib Baarir 1 1 Université Paris Ouest Nanterre La Défense

ftell, fseek : exemple

#include <s t d i o . h>

i n t main ( i n t arv , char ∗ arg [ ] ) {FILE ∗ f p ;long s i z e ;

i f ( ( fp = fopen ( "monF i ch i e r . t x t " , " rb "))==NULL) {f p r i n t f ( s t d e r r , "\ n Impo s s i b l e d ' o u v r i r l e f i c h i e r " ) ;return (−1);

} else {f s e e k ( fp , 0 , SEEK_END) ;s i z e = f t e l l ( f p ) ;f c l o s e ( fp ) ;p r i n t f ( "La t a i l l e de monF i ch i e r . t x t : %l d by t e s . \ n" ,

s i z e ) ;}return 0 ;

}

S. Baarir (Paris10/LIP6) La gestion des �chiers L2 Mia - 2010/2011 31 / 33

Page 52: Algorithmes et programmation II : La gestion des fichiers...Algorithmes et programmation II : La gestion des chiers Souheib Baarir 1 1 Université Paris Ouest Nanterre La Défense

Exercice : encodage/décodage d'un �chier texte (1/2)

Considérons le �chier texte "FichierAvecSauts.txt" contenant uneliste de lignes (chacune se terminant par '\n').

I Écrire une fonction qui permet de créer, à partir de�FichierAvecSauts.txt�, deux �chiers :

I un �chier constitué des lignes de �FichierSansSauts.txt�, misles unes à la suite des autres en supprimant le caractère '\n'qui les sépare,

I un �chier d'index �FichierIndex.bin� dans lequel serontrangées les positions ainsi que les longueurs des lignes du�chier précédent.

I Écrire une fonction qui permet, à partir des deux �chiers�FichierSansSauts.txt� et �FichierIndex.bin�, de restituer le�chier original.

S. Baarir (Paris10/LIP6) La gestion des �chiers L2 Mia - 2010/2011 32 / 33

Page 53: Algorithmes et programmation II : La gestion des fichiers...Algorithmes et programmation II : La gestion des chiers Souheib Baarir 1 1 Université Paris Ouest Nanterre La Défense

Exercice : encodage/décodage d'un �chier texte (2/2)

Trois nouvelles fonctions sont utiles :

I char * fgets (char * str, int num, FILE * pf) : Litune chaîne de caractères dans le �ux pf et s'arrête après n-1caractères lus, ou quand '\n' est lu, ou quand la �n de �chierest rencontrée. Si le caractère '\n' est lu, il �gure dans str.

I int fputs (const char * str, FILE * pf) : Écrit lachaine str dans le �ux pf.

I int feof (FILE * pf) : détecte une �n de �chier dans un�ux pf.

La solution peut être trouvée sur le lien suivant : ./exemple.c

S. Baarir (Paris10/LIP6) La gestion des �chiers L2 Mia - 2010/2011 33 / 33