1 of 21

CHAPITRE 6�� LANGAGE DE � PROGRAMMATION: C

F. Karami

2 of 21

���� II- Les Fichiers

*

Programmer en langage C

2

3 of 21

Fichiers

1) Introduction, définition et propriétés, mémoire tampon

2) Types de Fichiers

3) Déclaration d’un fichier, ouverture et fermeture de fichiers

4) La fonction d’écriture dans un fichier

5) La fonction de saisie dans un fichier

6) Lecture et écriture par caractère

7) Positionnement dans un fichier

*

Programmer en langage C

3

4 of 21

1) Introduction, définition et propriétés, mémoire tampon

  • Le langage C offre la possibilité de lire et d’écrire des données dans un fichier. Pour des raisons d’efficacité, les accès à un fichier se font par l’intermédiaire d’une mémoire-tampon (on parle de buffer), ce qui permet de réduire le nombre d’accès aux périphériques (disque...).
  • Pour pouvoir manipuler un fichier, un programme a besoin d’un certain nombre d’informations : l’adresse de l’endroit de la 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, dont le type est FILE *. Ce type est défini dans <stdio.h>.
  • Un objet de type FILE * est appelé flot de données (stream en anglais).

*

Programmer en langage C

4

Fichiers

5 of 21

Définition et propriétés

  • Un fichier est une suite de données conservées en permanence sur un support externe(disquette, disque dur,…). Ces données regroupent, le plus souvent, plusieurs composantes(champs) d’une structure.
  • En C, les fichiers sont considérés comme une suite d’octets(1 octet=caractère).
  • Principe de manipulation d’un fichier:
    • Ouverture du fichier
    • Lecture, écriture et déplacement dans le fichier
    • Fermeture du fichier
  • Deux techniques pour manipuler un fichier
    • L’accès séquentiel : pour atteindre l’information souhaité, il faut passer par la première puis la deuxième et ainsi de suite.
    • L’accès direct : consiste à se déplacer directement sur l’information souhaité sans avoir à parcourir celles qui la précédent.

*

Programmer en langage C

5

Fichiers

6 of 21

Mémoire tampon

  • L’accès au fichier se fait par l’intermédiaire d’une zone mémoire de stockage appelé mémoire tampon(buffer).

  • Le buffer une zone de la mémoire centrale qui stocke une quantité, assez importante, de données du fichier.

  • Son rôle est d’accélérer les entrées/sorties à un fichier.

*

Programmer en langage C

6

Fichiers

7 of 21

2) Types de Fichiers

  • Fichier de texte : est une suite de lignes, chaque ligne est une suite de caractères terminée par le caractère spécial ’\n’.
  • Fichier binaire : est une suite d’octets pouvant représenter toutes sortes de données.
  • Fichiers standards : se sont des fichiers spéciaux prédéfinis qui s’ouvrent automatiquement lorsqu’un programme commence à s’exécuter :
    • Stdin (standard input): entrée standard(par défaut, lié au clavier)
    • Stdout (standard output): sortie standard(par défaut, lié à l’écran)
    • Stderr stderr (standard error) : affichage des messages d’erreur (par défaut, à l’écran).

*

Programmer en langage C

7

Fichiers

8 of 21

3)Déclaration d’un fichier, ouverture et fermeture de fichiers

FILE *<pointeurfichier>;

  • Le type File est défini dans <stdio.h> en tant que structure. A l’ouverture d’un fichier, la structure FILE contient un certain nombre d’informations sur ce fichier telles que :
    • Adresse de la mémoire tampon,
    • Position actuelle dans le tampon,
    • Nombre de caractères déjà écrits dans le tampon,
    • Type d’ouverture du fichier,…
  • Pour travailler avec un fichier dans un programme, il faut ranger l’adresse de la structure FILE dans le pointeur de fichier et tout accès ultérieur au fichier se fait par l’intermédiaire de ce pointeur.

*

Programmer en langage C

8

Fichiers

9 of 21

Ouverture de fichiers

  • Lorsqu’on désire accéder à un fichier, il est nécessaire avant tout accès d’ouvrir le fichier à l’aide de la fonction fopen.
  • Cette fonction, de type FILE * ouvre un fichier et lui associe un flot de données. Sa syntaxe est :

fopen("nom-de-fichier","mode");

  • Sémantique des paramètres
    • Le premier argument de fopen fournit donc le nom du fichier.
    • Le second argument, mode, est une chaîne de caractères qui spécifie le mode d’accès au fichier.

*

Programmer en langage C

9

Fichiers

10 of 21

Ouverture de fichiers

  • Les différents modes d’accès sont

    • "r" ouverture d’un fichier texte en lecture

    • "w" ouverture d’un fichier texte en écriture

    • "a" ouverture d’un fichier texte en écriture à la fin

    • "r+" ouverture d’un fichier texte en lecture/écriture

    • "w+" ouverture d’un fichier texte en lecture/écriture

    • "a+" ouverture d’un fichier texte en lecture/écriture à la fin

*

Programmer en langage C

10

Fichiers

11 of 21

Ouverture de fichiers

  • Conditions particulières et cas d’erreur
    • Si le mode contient la lettre r, le fichier doit exister, sinon c’est une erreur(la fonction fopen retourne NULL).
    • Si le mode contient la lettre w, le fichier peut ne pas exister. Dans ce cas, il sera créé, et si le fichier existait déjà, son ancien contenu est perdu.
    • Si le mode contient la lettre a, le fichier peut ne pas exister. Comme pour le cas précédent, si le fichier n’existe pas, il est créé ; si le fichier existe déjà, son ancien contenu est conservé.
    • Si un fichier est ouvert en mode ”écriture à la fin” toutes les écritures se font à l’endroit qui est était la fin du fichier lors de l’exécution de l’ordre d’écriture. Cela signifie que si plusieurs processus partagent le même FILE*, résultat de l’ouverture d’un fichier en écriture à la fin, leurs écritures ne s’écraseront pas mutuellement.

*

Programmer en langage C

11

Fichiers

12 of 21

Ouverture de fichiers

  • Utilisation typique de fopen

#include <stdio.h>

FILE *fp;

…..

if ((fp = fopen("donnees.txt","r")) == NULL)

{

fprintf(stderr,"Impossible d’ouvrir le fichier données en

lecture\n");

exit(1);

}

*

Programmer en langage C

12

Fichiers

13 of 21

Fermeture de fichiers : la fonction fclose

  • La fonction fclose permet de terminer la manipulation d’un fichier ouvert par la fonction fopen.
  • Sa syntaxe est :
    • fclose(nom_du_fichier)
  • nom_du_fichier est de type FILE* retourné par la fonction fopen correspondante.
  • La fonction fclose retourne
    • 0 si l’opération s’est déroulée normalement et
    • EOF si il y a eu une erreur.
  • Exemple :

FILE *fp;

fp = fopen("donnees.txt","r")

fclose(fp);

*

Programmer en langage C

13

Fichiers

14 of 21

4)La fonction d’écriture en fichier: fprintf

  • La fonction fprintf, analogue à printf, permet d’écrire des données dans un flot.
  • Sa syntaxe est :
    • fprintf(nom_du_fichier, "format", expression1, . . . , expressionn);
  • nom_du_fichier est le flot retourné par la fonction fopen.
  • Les spécifications de format utilisées pour la fonction fprintf sont les mêmes que pour printf
  • Puisque
    • printf(...) ⇐⇒ fprintf(stdout,...)
  • Expressioni est une expression délivrant une valeur à écrire.

*

Programmer en langage C

14

Fichiers

15 of 21

5) La fonction de saisie en fichier : fscanf

  • La fonction fscanf, analogue à scanf, permet de lire des données dans un fichier.
  • Sa syntaxe est semblable à celle de scanf :
    • fscanf(nom_du_fichier, "format", adresse1, . . . , adressen);
  • nom_du_fichier 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.
  • Adressei : adresse des variables à affecter à partir des donner.
  • Un format et une adresse doivent être fournis pour chaque variable.

*

Programmer en langage C

15

Fichiers

16 of 21

Programme: Exemple

#include<stdio.h>

main(){

FILE *pf;

int i=100;

char c=‘c’;

float t=1.234;

pf=fopen(’’essai.txt’’, ’’w+’’); /*ouverture et mise à jour*/

fprintf(pf,’’%d %c %f ’’,i,c,t);

fscanf(pf,’’%d %c %f’’,&i,&c,&t);

fprintf(pf,’’%d %c %f,i,c,t);

fclose(pf);

}

*

Programmer en langage C

16

Fichiers

17 of 21

6)Lecture et écriture par caractère : fgetc et fputc

  • Similaires aux fonctions getchar et putchar les fonctions fgetc et fputc permettent respectivement de lire et d’écrire un caractère dans un fichier.
  • La fonction fgetc retourne le caractère lu dans le fichier et la constante EOF lorsqu’elle détecte la fin du fichier. Sa syntaxe est :
    • int fgetc(pf); /*où pf est de type FILE* */
  • La fonction fputc écrit un caractère dans le flot de données . Sa syntaxe est :
    • fputc(int caractere, FILE *flot)
  • Elle retourne l’entier correspondant au caractère lu (ou la constante EOF en cas d’erreur).

*

Programmer en langage C

17

Fichiers

18 of 21

Exemple

#define ENTREE "entree.txt"

#define SORTIE "sortie.txt »

main() {

FILE *f_in, *f_out;

int c;

// Ouverture du fichier ENTREE en lecture

if ((f_in = fopen(ENTREE,"r")) == NULL)

fprintf(stderr, "\nErreur: Impossible de lire %s\n",ENTREE);

// Ouverture du fichier SORTIE en ecriture

if ((f_out = fopen(SORTIE,"w")) == NULL)

fprintf(stderr, "\nErreur: Impossible d’ecrire dans %s\n",SORTIE);

// Recopie du contenu de ENTREE dans SORTIE

while ((c = fgetc(f_in)) != EOF)

fputc(c, f_out);

// Fermeture des flots de donnees

fclose(f_in); fclose(f_out);

}

*

Programmer en langage C

18

Fichiers

19 of 21

Positionnement dans un fichier : fseek, rewind et ftell

  • fseek
    • Les différentes fonctions d’entrées-sorties permettent d’accéder à un fichier en mode séquentiel : les données du fichier sont lues ou écrites les unes à la suite des autres.
    • Il est également possible d’accéder à un fichier en mode direct, c’est-à-dire que l’on peut se positionner à n’importe quel endroit du fichier.
    • La fonction fseek permet de se positionner à un endroit précis.

*

Programmer en langage C

19

Fichiers

20 of 21

Positionnement dans un fichier : fseek, rewind et ftell

  • fseek
  • a pour prototype :
    • int fseek(FILE *pf, long deplacement, int origine);
    • La variable deplacement détermine la nouvelle position dans le fichier. Il s’agit d’un déplacement relatif par rapport à origine, compté en nombre d’octets.
    • La variable origine peut prendre trois valeurs :
      1. SEEK_SET (égale à 0) : début du fichier ;
      2. SEEK_CUR (égale à 1) : position courante ;
      3. SEEK_END (égale à 2) : fin du fichier.

*

Programmer en langage C

20

Fichiers

21 of 21

Positionnement dans un fichier : fseek, rewind et ftell

  • rewind
    • int rewind(FILE *flot);
    • permet de se positionner au début du fichier. Elle est équivalente à fseek(flot,0, SEEK_SET) ;
  • ftell
    • long ftell(FILE *flot);
    • retourne la position courante dans le fichier (en nombre d’octets depuis l’origine).

*

Programmer en langage C

21

Fichiers