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 */
...