Cours : La manipulation des fichiers
Un peu de théorie
Dans un ordinateur, les fichiers sont stockés dans le disque dur, soit la mémoire très lente, mais persistante d'un ordinateur. Contrairement à la mémoire vive très rapide, mais qui est réinitialisée régulièrement.
Comme le disque dur est une mémoire lente, il serait très peu pratique de devoir l'interroger à chaque fois que l'on veut faire la moindre opération sur un fichier.
On utilise donc un système que l'on appelle la bufferisation. À l'ouverture du fichier, celui-ci est placé dans la RAM, et lorsque vous sauvegardez son état à ce moment précis est renvoyé sur le disque dur.
En C pour permettre cette bufferisation, on manipule ce que l'on appelle des flux (le flux est en gros votre fichier bufferisé dans la RAM) auxquels on accède via un type de pointeur un peu spécial.
Les fonctions de manipulation de fichiers étant de la fgestion d'entrées et sorties elles sont comprises dans une librairie que vous utilisez déjà : stdio.h, celle de scanf() et printf().
fopen : Ouvrir un fichier
Pour ouvrir un fichier, on utilisera la fonction fopen dont voici le prototype :
Son retour est donc un FILE * le pointeur un peu spécial dont on parlait plus haut.
Elle a besoin de connaitre le path du fichier que vous voulez ouvrir ainsi que le mode d'ouverture :
Les modes de fopen
Mode | Opérations | Effets supplémentaires |
|---|---|---|
r | Lecture | Rien |
r+ | Lecture & écriture | Rien |
w | Écriture | Si le fichier n'existe pas : le créé. |
w+ | Lecture & écriture | Si le fichier n'existe pas : le créé. |
a | Écriture | Si le fichier n'existe pas : le créé. |
a+ | Lecture & Écriture | Si le fichier n'existe pas : le créé. |
Exemples d'utilisation
Lire et remplacer
Je veux remplacer le contenu du fichier s'il existe et le créer sinon. Je veux pouvoir lire et écrire dedans :
Lire et compléter
Je veux ajouter du contenu à un fichier s'il existe et le créer sinon. Je veux pouvoir lire et écrire dedans :
fclose : fermer le fichier
Une fois que vous avec fini vos manipulations sur le fichier, il faut fermer le flux. Cela permet de stopper la bufferisation, libérer de la RAM et renvoyer tranquillement votre fichier dans le disque dur.
Passez simplement à fclose le FILE * que vous aviez récupéré avec fopen.
fprintf : Écrire dans un fichier
La fonction fprintf s'utilise exactement comme printf à une différence près : on lui transmet le pointeur sur le flux sur lequel on veut écrire :
fgets : Lire les lignes d'un fichier
Pour lire le contenu d'un fichier, il nous faudrait connaitre sa taille pour dire "récupère-moi tant de caractères dans ce fichier" mais ça n'est pas souvent le cas. Du coup généralement on fait une boucle en utilisant la fonction fgets.
Pour vous éviter de la torture des méninges voilà le code que vous pouvez utiliser :