Académique Documents
Professionnel Documents
Culture Documents
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…
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.
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
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.
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