Chapitre 6 : Les Fichiers 1. Généralités 1.1 . Introduction Les types de donnée
Chapitre 6 : Les Fichiers 1. Généralités 1.1 . Introduction Les types de données étudiés jusqu’ici servaient à décrire des informations. Ces informations étaient toujours perdues quand nous éteignions l’ordinateur. Par exemple si on utilise un tableau d’enregistrements d’étudiants pour gérer la scolarité, il faut à chaque exécution saisir les éléments du tableau. Dans ce chapitre, nous allons étudier comment remédier à cet inconvénient en créant et en utilisant les fichiers. Définition : Un fichier est une suite éventuellement vide de composants de même type stockés sur une mémoire secondaire (disquette, disque dur, CD, etc.). 1.1 . Introduction Il existe en permanence, est indépendant de tout traitement et est accessible par un ou plusieurs programmes. Il permet : • de sauvegarder l’information entre plusieurs exécutions, • de faire communiquer entre eux plusieurs programmes, qu’ils soient sur une machine ou sur des machines différentes, • de transmettre des données entre plusieurs machines différentes. 1.2. Les fichiers séquentiels Un fichier à organisation séquentielle est composé d’articles consécutifs sur la mémoire de masse. Ces articles sont rangés dans l’ordre de leur enregistrement. Un fichier séquentiel est facile à implémenter mais présente quelques inconvénients : • l’accès est lent pour de grands fichiers, • l’ajout d’un article n’est possible qu’en fin de fichier. 1.2.1 : Organisation et Accès L’organisation définit la manière dont les articles sont disposés sur le support. On distingue trois types d’organisations : • l’organisation séquentielle qui ne permet que l’accès séquentiel. On accède au fichier dans l’ordre d’enregistrement des articles, • l’organisation directe qui permet l’accès direct. On accède directement à un élément sans passer par les articles précédents, • l’organisation séquentielle indexée qui permet l’accès séquentiel et l’accès direct. 1.2.2Caractérisations générales d’un fichier Un fichier est caractérisé par : • le nom, • l’unité d’information, • l’organisation, • le support. Le nom du fichier permet de l’identifier, on l’appelle nom externe. Il est formé selon les règles du système d’exploitation. Parfois il faut faire précéder ce nom du chemin d’accès. 1.2.3 : Traitement des fichiers • Association entre une variable fichier et un fichier externe Pour pouvoir être utilisée, une variable fichier ou fichier interne (située en mémoire vive) doit impérativement être initialisée en l’associant à un fichier externe. Toutes les opérations sur le fichier interne affecteront le fichier externe. On parle de fichier disque (le fichier externe) et de fichier logique (le fichier interne). • Ouverture d’un fichier Avant toute utilisation, il faut avoir le fichier ouvert. L’ouverture du fichier permet au système d’exploitation la création d’une zone de transfert en mémoire, le tampon d’échange. En général, on distingue trois modes d’ouverture d’un fichier : ouverture en lecture seule, ouverture en écriture seule, ouverture en lecture / écriture. Selon le mode d’ouverture l’exploitation du tampon sera différente. L’information n’est pas immédiatement déposée sur le disque après l’opération d’écriture ni qu’elle vient du disque après opération de lecture. 1.2.3 : Traitement des fichiers Fermeture d’un fichier En fin d’utilisation, un fichier doit être fermé pour une purge éventuelle du tampon interne. Ce n’est qu’après cette opération que l’on peut être assuré que toutes les opérations d’écriture sont physiquement réalisées sur le fichier disque ou fichier externe. Ecriture et Lecture dans un fichier Lorsqu’un fichier est ouvert en écriture, on peut l’agrandir en effectuant une opération d’écriture. Lorsqu’un fichier est ouvert en lecture ou lecture / écriture, on peut lire, extraire des informations. 2. Les Fichiers en C 2.1.1 : Descripteur de fichier Dans un programme C , on accède à un fichier via son descripteur . C’est une structure contenant tous les renseignements nécessaires pour gérer l’accès au fichier par le programme. Un descripteur de fichier a le type FILE , défini dans la bibliothèque stdio.h . Les fonctions de manipulation des fichiers n’utilisent pas directement cette structure, mais un pointeur sur une telle structure. 2.1: Ouverture et fermeture d’un fichier 2.1.2 : Ouverture d’un fichier Avant de pouvoir travailler sur un fichier, il faut l’ouvrir avec la fonction fopen . Cette opération crée et remplit la structure descripteur de fichier. Sa syntaxe est la suivante : FILE * fopen ( char * nom_fichier , char * mode ) ; Les paramètres de la fonction sont le nom du fichier sur disque, nom_fichier , avec éventuellement son chemin d’accès, ainsi qu’un mode d’ouverture. Les différents modes sont indiqués dans le tableau suivant. Modes d’ouverture d’un fichier Si l’ouverture du fichier réussit, la fonction fopen renvoie un pointeur sur la structure FILE associée. Dans le cas contraire, elle renvoie un pointeur nul. 2.1.3 : Fermeture d’un fichier Lorsque l’on a fini d’utiliser un fichier, on le ferme à l’aide de la fonction fclose : int fclose (FILE * fichier ) ; La fonction fclose renvoie 0 en cas de succès de la fermeture et -1 en cas d’erreur. Même si la fin d’un processus ferme tous les fichiers ouverts, il vaut mieux les fermer explicitement dès qu’on n’en a plus besoin, pour éviter des modifications malencontreuses. Si le fichier n’existe pas, l’ouverture en lecture ne peut avoir lieu, et le message Erreur de fopen est donc affiché. Exemple : Le programme suivant ouvre un fichier de nom toto en lecture, teste le résultat de la fonction d’ouverture du fichier et affiche le message idoine, puis ferme le fichier. 2.2 : Lecture/écriture binaire Les lecture et écriture dans un fichier peuvent s’effectuer soit sur un nombre de données précisé, soit selon un format. Dans le premier cas, on parle de lecture/écriture binaire . 2.2.1 Écriture binaire L’écriture binaire s’effectue à l’aide de la fonction fwrite : size_t fwrite ( void * ptr , size_t taille , size_t nb_elements , FILE * fichier ) ; Cette fonction écrit dans le fichier au plus nb_elements de longueur taille octets contenus dans la zone mémoire pointée par ptr . Elle retourne le nombre d’éléments effectivement écrits . 2.2.1 Écriture binaire Exemple: Le programme suivant ouvre un fichier toto en écriture et y écrit 5 caractères contenus dans la chaîne de caractères Bonjour. #include <stdio.h> #include <string.h> int main ( ) { FILE * fich ; int nb ; char buf [20] ; fich = fopen ("toto" , "w”) ; if ( fich == NULL){ printf ("Erreur de fopen \n ») ; return (1) ; } /* L ‘ouvertures ' est bien passée */ /* mise en place dans buf de la chaîne à écrire */ strcpy ( buf , "Bonjour " ) ; /* écriture de 5 caractères de buf */ nb = fwrite ( buf , sizeof (char) , 5 , fich ) ; printf ( "Nb de caractères écrits : %d\n" ,nb ) ; fclose(fich) ; } l’affichage : Nb de caractères écrits : 5 et d’autre part, à l’écriture du fichier toto qui contient alors :Bonjo c-à-d les 5 premiers caractères de la chaîne Bonjour . 2.2.2 Lecture binaire La lecture binaire est similaire à l’écriture binaire. Elle utilise la fonction fread : size_t fread ( void * ptr , size_t taille , size_t nb_elements , FILE * fichier ) ; Cette fonction lit dans le fichier au plus nb_elements de longueur taille octets et les place dans la zone mémoire pointée par ptr . Elle retourne le nombre d’éléments effectivement lus . 2.2.2 Lecture binaire Exemple : Le programme suivant ouvre un fichier toto en lecture et y écrit au plus 10 caractères qu’elle place dans une zone pointée par buf. #include <stdio.h> int main( ){ FILE * fich ; int nb ; char buf [20] ; fich = fopen ("toto" , "w”) ; if ( fich == NULL){ printf ("Erreur de fopen \n ») ; return (1) ; } /* L ‘ouvertures ' est bien passée */ /* lecture de 10 caractères dans buf*/ nb = fread (buf ,sizeof(char) , 10 , fich ) ; printf ("Nb de caractères écrits : %d\n" ,nb ) ; printf (“chaine lue : %s\n”, buf); fclose(fich) ; } 2.2.3 Fin de fichier La fonction feof (end of file ) permet de tester si la fin du fichier est atteinte, par exemple suite à plusieurs lectures : int feof (FILE * fichier ) ; Elle renvoie un entier positif si la fin de fichier est atteinte ; 2.2.3 Fin de fichier #include <stdio.h> int main( ){ FILE * fich ; int nb ; char buf [20] ; fich = fopen ("toto" , "w”) ; if (fich == NULL){ printf ("Erreur de fopen \n ») ; return (1) ; } /* L ‘ouvertures ' est bien passée */ while(!feof(fich)){ nb = fread (buf ,sizeof(char) , 2 , fich ); printf ("Nb de caractères lus : %d\n" ,nb ) ; printf (“chaine lue : %s\n”, buf); } printf (“Fin du fichier .\n”); fclose(fich) ; } Exemple : Le programme suivant est similaire à celui de l’exemple 5.3, mais lit les caractères deux par deux. 2.3 : Lecture/écriture d’une chaîne de caractères 5.3.1 Lecture d’une chaîne de caractères La fonction fgets permet de lire une chaîne de caractères dans un fichier : char * fgets ( char uploads/Management/ les-fichiers-chap6.pdf
Documents similaires










-
32
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Mar 20, 2022
- Catégorie Management
- Langue French
- Taille du fichier 0.1282MB