Les fichiers de texte en C

1. Inclusion

Si vous ne l'avez pas déjà fait pour utiliser scanf() ou printf(), il faut inclure <stdio.h>.

2. Déclaration de variable

Pour utiliser un fichier de texte (stocké en général sur un disque dur) dans un programme, il faut déclarer une variable d'un type particulier qui "repésentera" ce fichier au sein du programme :
FILE * vf; (vf est le nom de la variable)

3. Ouverture

La déclaration précédente ne fait que déclarer un pointeur, sans l'initialiser. L'ouverture d'un fichier consiste à associer un fichier sur disque à une variable du programme : vf = fopen( nom_fichier, mode );
nom_fichier est une chaîne de caractères (constante ou variable) contenant le chemin d'accès (absolu ou relatif) au fichier disque,
et où mode est une chaîne de caractères valant "r" (comme "read") si l'on veut lire dans le fichier ou "w" (comme "write") si l'on veut écrire dans le fichier.

Une autre conséquence de l'ouverture d'un fichier :

4. Test d'ouverture

L'ouverture a pu mal se passer dans plusieurs cas, notamment : Il faut donc tester si l'ouverture s'est bien passée avant de commencer à lire ou à écrire dans un fichier supposé ouvert :
if ( vf == NULL ) { printf( "Je n'ai pas pu ouvrir %s !\n", nom_fichier ); exit( 1 ); }

5. Lectures / écritures

6. Test de fin de fichier (en lecture)

Après de nombreuses opérations de lecture dans un fichier de texte, il se peut qu'il n'y ait plus rien à lire ! On dit alors qu'on a atteint la fin de fichier.
Selon les systèmes, lire au-delà de cette limite peut soit provoquer une erreur, soit simplement retourner toujours la même donnée. Il faut donc tester la fin de fichier AVANT chaque lecture (eh oui, le fichier peut être vide !) à l'aide de la fonction feof() (end of file) :
while ( ! feof( vf ) )
  {
  lire dans le fichier
  if ( ! feof( vf ) )
    traitement des données lues
  }
Le test de fin de fichier à l'intérieur de la boucle est utile car feof() ne retourne VRAI que lorsqu'on a dépassé la fin de fichier.

7. Fermeture

Comme expliqué au paragraphe "ouverture", le fichier est plus ou moins inaccessible aux autres programmes tant que le fichier reste ouvert. Il faut donc le fermer le plus tôt possible, c'est-à-dire dès qu'on n'en a plus besoin par l'instruction :
fclose( vf );

8. Exemples de lectures

Soit un fichier contenant :
123  456
789
 

On peut envisager 4 manières de le lire :

  1. caractère par caractère (c=fgetc(vf);), on obtient : '1','2','3',' ',' ','4','5','6','\n','7','8','9','\n'
  2. mot par mot (fscanf(vf,"%s",tab);), on obtient : "123","456","789"
  3. ligne par ligne (fgets(tab,max,vf);), on obtient : "123  456\n","789\n"
  4. terme par terme (fscanf(vf,"%d",&n);), on obtient : 123,456,789

9. Liens