next up previous contents index
Next: Programmation orientée objet Up: No Title Previous: Lecture et écriture d'octets

Modes d'accès à un fichier

  Outre les modes simples d'accès, "r", "w" et "x", il est souvent nécessaire de combiner lecture et écriture en modifiant la position courante dans le flot.

Pour lire sur un fichier existant puis écrire sur ce fichier en écrasant son contenu initial, on utilise le mode d'accès r+ et la fonction rewind  :

FILE *in_out = fopen("fichier", "r+");
int n;

fscanf(in_out, "%d", &n);                /* lecture */
rewind(in_out);                          /* positionnement au début */
fprintf(in_out, "au début : %d", 2*n);   /* écriture au début */
fclose(in_out);

Pour lire sur un fichier existant puis écrire à la fin de ce fichier, on utilise le mode d'accès r+ et la fonction fseek  :

FILE *in_out = fopen("fichier", "r+");
int n;

fscanf(in,"%d", &n);                   /* lecture */
fseek(in, 0, 2);                       /* positionnement à la fin */
fprintf(in, "à la fin : %d\n", 2*n);   /* écriture à la fin */
fclose(in_out);

Pour lire sur un fichier ou le créer , puis écrire à la fin de ce fichier, on utilise le mode d'accès a+ et la fonction fseek :

FILE *in_out = fopen("fichier", "a+");
char s[10];

rewind(in_out);                       /* positionnement au début */
fscanf(in,"%9s", s);                  /* lecture */
fseek(in, 0, 2);                      /* positionnement à la fin */
fprintf(in, "à la fin : %s\n", s);    /* écriture à la fin */
fclose(in_out);

Pour créer un fichier (en écrasant son contenu s'il existe déjà) et y écrire des données, puis les relire, on utilise le mode d'accès w+ et la fonction rewind :

FILE *in_out = fopen("fichier", "w+");
char s[10];

fprintf(in, "au début\n");            /* écriture */
rewind(in_out);                       /* positionnement au début */
fscanf(in,"%9s", s);                  /* lecture au début */
fclose(in_out);

L'usage combiné des fonctions fseek, ftell, et éventuellement rewind, permet de déterminer le nombre d'octets d'un fichier en lecture :

FILE *in = fopen("donnees", "r");
int nb;

fseek(in, 0, 2);                      /* positionnement à la fin */
nb = ftell(in);                       /* nombre d'octets */
rewind(in);                           /* positionnement au début */
...


Jean-Philippe Chancelier
9/29/1998