Vous êtes sur la page 1sur 2

2mre année BTS Informatique de gestion 2009-2010 2mre année BTS Informatique de gestion 2009-2010

DAIGL ARLE DAIGL ARLE

MINI PROJET DE DEVELOPPEMENT n°2 Ouverture d’un fichier


LANGAGE C
FILE * fopen(char * NomFichier, char * mode)
Manipulation de fichiers char * NomFichier : chaîne de caractères placée entre guillemets contenant le nom du fichier
à ouvrir avec éventuellement le chemin.
Durée : 2 séances de 2 heures char * mode : chaîne de caractères placée entre guillemets, contenant le mode d’ouverture du
fichier, il existe 6 mode d’ouvertures standard.
Moyens mis à disposition des élèves Mode Description
Matériels : Outils logiciels et système d’exploitation : r Ouvre le fichier en lecture seule. Le pointeur de position courante est placé au
- 1 PC en configuration station de - Windows XP Professionnel : DEV C++ début du fichier. Le fichier doit exister sinon une erreur se déclenche.
travail - Ou Compilateur gcc de Linux (Debian ...) w Ouvre le fichier en écriture seule. Si le fichier n’existe pas, il est créé. S’il existe,
il est ramené à zéro c’est à dire qu’il est vide de son contenu.
Divers : a Ouvre le fichier en mode écriture pour ajout en fin de fichier (append). Lors de
l’ouverture du fichier, le pointeur de position courante est placé directement en
Objectifs à atteindre fin de fichier après le dernier octet. Si le fichier n’existe pas il est créé.
- Utiliser les fonctions de bases permettant la manipulation de fichiers en C r+ Ouvre le fichier en lecture/écriture. Le pointeur de position courante est placé au
- Mettre en application les bases d’un langage procédural début du fichier. Le fichier doit exister sinon une erreur se déclenche. Ce mode
- Mettre en application les structures de contrôles d’un langage procédural permet la mise à jour des données.
- Se familiariser avec la structure avancée « structure » d’un langage procédural w+ Ouvre le fichier en lecture/écriture. Voir les contraintes du mode w qui restent
- Faire un jeu d’essai les mêmes.
a+ Ouvre le fichier en lecture/écriture. Si le fichier n’existe pas, il est créé.

Compétences concernées Valeurs de retour : l’adresse d’une structure FILE ou NULL en cas d’erreur.
C41 • Analyser la logique d'un algorithme et/ou d’un programme. A part les fichiers textes, vous avez la possibilité de créer des fichiers binaires en ajoutant le
C42 • Maîtriser les instructions de base d'un langage de programmation procédural suffixe « b » aux différents modes d’ouverture : rb+, wb, ab, etc…

Ecriture de données dans un fichier


Informations supplémentaires : fonctions permettant de manipuler les fichiers en
Langage C int fwrite(char * buffer, int TailleUnElement, int NbElementsAEcrire, FILE * PtrFich)

En C, la notion d’accès direct et d’accès séquentiel n’existe pas de manière explicite. Cela buffer : adresse d’une variable déclarée auparavant dans le programme et contenant les
dépend de la manière dont on utilise les différentes fonctions et procédures. données à écrire dans le fichier.
TailleUnElement : taille d’un élément à écrire dans le fichier. Il est plus simple d’utiliser la
Lors de la manipulation des fichiers en C, on retrouve se qu’on appel les fonctions de bas fonction sizeof( ) pour déterminer la taille d’un élément. Par exemple, sizeof( struct
niveau et les fonctions de haut niveau. Personne), siezof(int), sizeof(char) etc … .
NbElementsAEcrire : nombre d’éléments à écrire consécutivement dans le fichier.
Les fonctions de bas niveau effectuent des appels système, ce qui rend dépendantes du PtrFich : Pointeur de fichier qui pointe vers le fichier concerné.
système d’exploitation. Elle effectue directement les accès fichiers.
Valeurs de retour : retourne le nombre d’éléments effectivement écrits dans le fichier. Cette
Les fonction de haut niveau font intervenir la bufferisation, c’est à dire que les caractères valeur doit être égale au nombre d’éléments demandé. Sinon elle retourne –1 en cas d’erreur.
transmis sont stockés temporairement dans un tampon mémoire et ce n’est que lorsque le
tampon est rempli que les données sont envoyés, dans le fichier sur le disque. De même que Lecture de données dans un fichier
pour une opération de lecture, les données souhaités sont d’abord chargées dans le buffer et
c’est dans le buffer que l’opération de lecture a lieu. int fread(char * buffer, int TailleUnElement, int NbElementsALire, FILE * PtrFich)

Notez !!! que l’on va manipuler les fichiers avec les fonctions de haut niveau, par contre rien buffer : adresse d’une variable déclarée auparavant dans le programme qui stockera les
vous empêche d’approfondir sur les fonctions de bas niveau. données lues dans le fichier souhaité
TailleUnElement : taille d’un élément à lire dans le fichier. Il est plus simple d’utiliser la
fonction sizeof( ) pour déterminer la taille d’un élément.

Lycée LES PERSEVERANTS Page 1 / 4 Lycée LES PERSEVERANTS Page 2 / 4


2mre année BTS Informatique de gestion 2009-2010 2mre année BTS Informatique de gestion 2009-2010
DAIGL ARLE DAIGL ARLE
NbElementsALire : nombre d’éléments à lire consécutivement dans le fichier.
PtrFich : Pointeur de fichier qui pointe vers le fichier concerné. Exercice 1 : Gestion d’un fichier clients

Valeurs de retour : retourne le nombre d’éléments effectivement lus dans le fichier. Cette Partie 1 : Ecrire un programme gérant un fichier de clients. Pour chacun d’eux on souhaite
valeur doit être égale au nombre d’éléments demandé. Sinon elle retourne –1 en cas d’erreur. connaître le nom, le prénom et l’âge. Pour améliorer, on souhaite faire apparaître un menu qui
propose :
Déplacement dans un fichier
1 : Saisir un nouveau client, pensez à indexer les clients lors de l’ajout dans le fichier.
int fseek(FILE * Ptrfich, long Déplacement, int Origine) 2 : Afficher un client à On demande le nom du client souhaité puis on affiche les
informations de ce client. S’il n’y a pas de client pour le nom on affiche un message d’erreur.
PtrFich : Pointeur de fichier qui pointe vers le fichier concerné. Si le nom apparaît plusieurs fois on affiche l’ensemble des réponses.
Déplacement : nombre d’octets dont doit se déplacer le pointeur de position courante. Si la 3 : Afficher tous les clients
valeur est positive le pointeur se déplace vers l’avant sinon le pointeur se déplace en arrière. 4 : Quitter.
Origine : Point de départ du déplacement demandé
0 ou SEEK_SET à origine du déplacement : début du fichier Partie 2 : Ecrire le même programme en mettant en place les fonctions suivantes :
1 ou SEEK_CUR à origine du déplacement : position courante CreerClient( )
2 ou SEEK_END à origine du déplacement : fin du fichier AfficherClient( )
AfficherTousClient( )
Valeur de retour : -1 en cas d’erreur. Quitter( )

Exemples: fseek(Ptrfich, 0L, SEEK_SET); //se déplacer au début du fichier Attention !!! Réfléchissez sur les paramètres formels et la mise en place d’un tel programme
fseek(Ptrfich, -(long)sizeof(char), SEEK_END); //se déplacer d’une chaîne ou avant de commencer à coder.
d’un caractère en arrière en partant de la fin du fichier
fseek(Ptrfich, (long)sizeof(int), SEEK_CUR); //se déplacer d’un entier en avant

Connaître la position courante dans un fichier ouvert

long ftell(FILE * Ptrfich)

Valeur de retour : cette fonction retourne la position courante dans le fichier. La valeur
retournée correspond au nombre d’octets qui séparent le pointeur de position courante du
début du fichier sinon elle retourne –1 en cas d’erreur.

Fermeture d’un fichier

int fclose(FILE * Ptrfich)

Valeur de retour: -1 en cas d’erreur.

Vider le buffer sans fermer le fichier

int fflush( FILE * Ptrfich)

Valeur de retour: -1 en cas d’erreur.

Détection de la fin du fichier

int feof(FILE * Ptrfich)

Valeur de retour: 0 (zéro) si la fin du fichier n’est pas atteinte, 1 si la fin est atteinte sinon -1
en cas d’erreur

Lycée LES PERSEVERANTS Page 3 / 4 Lycée LES PERSEVERANTS Page 4 / 4

Vous aimerez peut-être aussi