Programmation en C :

12. Fichiers

codecommentaire
/* prog12a.c */

#include <stdio.h>

char* s="10";
int i=0;
FILE* f=NULL;

int main() {
  f=fopen("tmp.txt","w");
  if (f==NULL) {
    printf("ecriture impossible\n");
    return (-1);
  }
  printf("fichier ouvert\n");
  for (i=0;i<10;i++)
    fprintf(f,"%s%c\n",s,i+48);
  fclose(f);
  printf("ecriture terminee\n");
  return 0;
}
Un fichier est de type FILE* (et donc un pointeur).

la fonction fopen réalise l'ouverture d'un fichier  elle prend en paramètre le nom du fichier et le mode d'ouverture :
"w" pour l'écriture (le fichier est créé ou vidé),
"r" pour la lecture (le fichier doit être accessible en lecture),
"a" pour l'ajout en fin du fichier (sans l'effacer),
"rw" pour lecture et écriture, etc.

On retrouve pour les fonctions de lecture/écriture fichiers un comportement similaire à celui des fonctions d'entrée/sortie clavier/écran1. On peut donc lire et écrire différents types de données dans un fichier ; par exemple, remplacer ici :
  for (i=0;i<10;i++)
    fprintf(f,"%s%c\n",s,i+48);

par :
  for (i=100;i<110;i++)
    fprintf(f,"%d\n",i);


Important.
Il est impératif de :
– vérifier que l'ouverture du fichier est effective ((f==NULL) si le fichier n'a pu être atteint).
– fermer le fichier ouvert en fin de travail.
/* prog12b.c */
#include <stdio.h>

int n;
char s[4];
FILE* f=NULL;

int main() {
  f=fopen("tmp.txt","r");
  if (f==NULL) {
    printf("fichier inexistant\n");
    return (-1);
  }
  printf("fichier ouvert\n");
  while(!feof(f)) {
    fscanf(f,"%s",s);
    printf("%s\n",s);
  }
  fclose(f);
  printf("fichier ferme\n");
  return 0;
}
Lors de la lecture, la fonction booléenne feof teste l'arrivée à la fin du fichier.

Si on voulait lire des entiers au lieu de chaines de caractères, au lieu de :
  fscanf(f,"%s",s);
on écrirait :
  fscanf(f,"%n",n);
ou encore :
  fscanf(f,"%s",s);
  n=atoi(s);

en transformant la chaine s en entier n grâce à la fonction atoi.
1 Voir l'annexe Entrées et sorties du C