160 likes | 284 Views
FLSI602 Génie Informatique et Réseaux. Alberto Bosio alberto.bosio@lirmm.fr www.lirmm.fr/~bosio/FLSI602. La gestion des fichiers. Pour manipuler un fichier : l'adresse de mémoire-tampon où se trouve le fichier; la position de la tête de lecture;
E N D
FLSI602 Génie Informatique et Réseaux Alberto Bosio alberto.bosio@lirmm.fr www.lirmm.fr/~bosio/FLSI602
La gestion des fichiers • Pour manipuler un fichier : • l'adresse de mémoire-tampon où se trouve le fichier; • la position de la tête de lecture; • le mode d'accès au fichier (lecture ou écriture). • Ces informations sont rassemblées dans une structure • FILE * (défini dans <stdio.h>); • Un objet de type FILE * est appelé flot de données (en anglais, stream).
Les flots d’entrées et de sorties standard • stdin (standard input) : unité d'entrée (par défaut, le clavier) ; • stdout (standard output) : unité de sortie (par défaut, l'écran) ; • stderr (standard error) : unité d'affichage des messages d'erreur (par défaut, l'écran).
Ouverture et fermeture d'un fichier • fopen("nom-de-fichier","mode"); • La valeur retournée est un flot de données (FILE*); • Le premier argument est le nom du fichier concerné; • Le second argument spécifie le mode d'accès au fichier • les fichiers textes: pour lesquels les caractères de contrôle (retour à la ligne ...) seront interprétés en tant que tels lors de la lecture et de l'écriture ; • les fichiers binaires, pour lesquels les caractères de contrôle se sont pas interprétés.
Ouverture et fermeture d'un fichier • r, le fichier doit exister. • w, le fichier peut ne pas exister. • Dans ce cas, il sera créé. Si le fichier existe déjà, son ancien contenu sera perdu. • a, le fichier peut ne pas exister. • Dans ce cas, il sera créé. Si le fichier existe déjà, les nouvelles données seront ajoutées à la fin du fichier précédent.
Ouverture et fermeture d'un fichier • fclose(flot); • Elle permet de fermer le flot qui a été associé à un fichier par la fonction fopen; • L’argument flot est le flot de type FILE* retourné par la fonction fopen correspondant. • La fonction fclose retourne un entier qui vaut zéro si l'opération s'est déroulée normalement (et une valeur non nulle en cas d'erreur).
Les entrées-sorties formatées • La fonction fprintf, analogue à printf, permet d'écrire des données dans un fichier. • fprintf(flot,"chaîne de contrôle",arg1,...,argn); • L’argument flot est le flot de données retourné par la fonction fopen; • Les spécifications de format utilisées pour la fonction fprintf sont les mêmes que pour printf.
Les entrées-sorties formatées • La fonction fscanf, analogue à scanf, permet de lire des données dans un fichier. Sa syntaxe est semblable à celle de scanf : • fscanf(flot,"chaîne de contrôle",arg1,...,argn); • L’argument flot est le flot de données retourné par fopen. • Les spécifications de format sont ici les mêmes que celles de la fonction scanf.
Impression et lecture de caractères • La fonction fgetc permet de lire un caractère dans un fichier. • int fgetc(FILE* flot); • La fonction fgetc, de type int, retourne le caractère lu dans le fichier; • Retourne la constante EOF lorsqu'elle détecte la fin du fichier. • L’argument flot est le flot de type FILE* retourné par la fonction fopen. • Déclarer de type int la variable destinée à recevoir la valeur de retour de fgetc à fin de détecter correctement la fin de fichier.
Impression et lecture de caractères • La fonction fputc permet d’écrir un caractère dans un fichier : • int fputc(int caractere, FILE *flot); • Retourne l'entier correspondant au caractère écrit (ou la constante EOF en cas d'erreur). • L’argument flot est le flot de type FILE* retourné par la fonction fopen.
Lecture d’une chaîne de caractères • char * fgets(char * str,int n,FILE *flot ); • str est une chaîne de caractères, n un entier et flot le flot de type FILE* • Lire dans un fichier, caractère par caractère à partir de la position courante, jusqu'à n-1, ou si rencontre le caractère de fin de ligne '\n’
Lecture d’une chaîne de caractères • Lire une ligne de fichier, sans dépasser un nombre maximum de caractères n. • Le nombre de caractères lus soit égal à n - 1. • Les caractères lus sont copiés dans str, y compris le caractère de fin de ligne si celui-ci fait partie des au plus n-1 caractères lus. La fonction fgets complète la chaîne par le traditionnel '\0'. • Retourne le pointer à la chaîne de caractères (str), ou NULL dans le cas EOF.
Exercice • Ecrire le programme capable de lire le contenu du fichier texte entree.txt, et le recopie caractère par caractère dans le fichier sortie.txt :
Exercice 2 • Un fichier texte contient des informations relatives aux employés d'une entreprise. Pour chaque employé est donné nom et prénom. • La première ligne spécifie le nombre des employés. • Exemple 2 Dupont Albert Girard Robert
Exercice 2 • Ecrire la structure des données nécessaire pour stocker les informations du fichier texte • Ecrire le programme pour lire le fichier texte