Académique Documents
Professionnel Documents
Culture Documents
Les variables n'existent que dans la mémoire vive : une fois votre programme arrêté, elles
sont supprimées de la mémoire et il n'est pas possible de retrouver ensuite leur valeur.
On peut lire et écrire dans des fichiers en langage C. Ces fichiers seront écrits sur le disque
dur de votre ordinateur.
Incluez au moins les bibliothèques stdio.h et stdlib.h en haut de votre fichier .c :
#include <stdlib.h>
#include <stdio.h>
• "r" : lecture seule. Vous pourrez lire le contenu du fichier, mais pas y écrire. Le
fichier doit avoir été créé au préalable.
• "w" : écriture seule. Vous pourrez écrire dans le fichier, mais pas lire son contenu.
Si le fichier n'existe pas, il sera créé.
• "a" : mode d'ajout. Vous écrirez dans le fichier, en partant de la fin du fichier. Vous
ajouterez donc du texte à la fin du fichier. Si le fichier n'existe pas, il sera créé. Ce
mode d'ajout peut être utile si vous voulez seulement ajouter des informations à la
fin du fichier.
• "a+" : ajout en lecture / écriture à la fin. Vous écrivez et lisez du texte à partir de la
fin du fichier. Si le fichier n'existe pas, il sera créé.
• "r+" : lecture et écriture. Vous pourrez lire et écrire dans le fichier. Le fichier doit
avoir été créé au préalable.
• "w+" : lecture et écriture, avec suppression du contenu au préalable. Le fichier est
donc d'abord vidé de son contenu, vous pouvez y écrire, et le lire ensuite. Si le fichier
n'existe pas, il sera créé.
."r" (lecture), "w" (écriture) et "r+" (lecture et écriture) sont ceux que vous utiliserez le plus
souvent.
Le code suivant ouvre le fichier test.txt en mode "r+" (lecture et écriture) :
int main(int argc, char *argv[])
{
FILE* fichier = NULL;
fichier = fopen("test.txt", "r+");
return 0;
}
Le pointeur fichier devient alors un pointeur sur test.txt .
Où doit être situé test.txt ?
Sauf indication contraire, le fichier test.txt Il doit être situé dans le même dossier que votre
exécutable ( .exe ).
Quand vous avez terminé de travailler sur un fichier, n'oubliez pas de le fermer avec la
fonction fclose .
fclose(fichier);
Au final, le schéma que nous allons suivre pour ouvrir et fermer un fichier sera le suivant :
if (fichier != NULL)
{ // On lit et on écrit dans le fichier
fclose(fichier); // On ferme le fichier qui a été ouvert
}
return 0;
}
Écrivez dans un fichier
Il existe plusieurs fonctions capables d'écrire dans un fichier. Ce sera à vous de choisir celle
qui est la plus adaptée à votre cas.
Voici les trois fonctions que nous allons étudier :
1. fputc écrit un caractère dans le fichier (UN SEUL caractère à la fois).
2. fputs écrit une chaîne dans le fichier.
3. fprintf écrit une chaîne formatée dans le fichier.
• Le caractère à écrire
• Le pointeur sur le fichier dans lequel écrire.
La fonction retourne un int , c'est un code d'erreur. Ce int vaut EOF si l'écriture a échoué,
sinon il a une autre valeur.
int main(int argc, char *argv[])
{
FILE* fichier = NULL;
if (fichier != NULL)
{
fputc('A', fichier); // Écriture du caractère A
fclose(fichier);
}
return 0;
}
En résumé, le système de curseur vous permet d'aller lire et écrire à une position précise
dans le fichier.
La fonction fseek permet de déplacer le curseur d'un certain nombre de caractères (indiqué
par deplacement ) à partir de la position indiquée par origine .
• Le nombre deplacement peut être un nombre positif (pour se déplacer en avant),
nul (= 0) ou négatif (pour se déplacer en arrière).
• Quant au nombre origine , vous pouvez mettre comme valeur l'une des trois
constantes (généralement des define) listées ci-dessous :
o SEEK_SET : indique le début du fichier ;
o SEEK_CUR : indique la position actuelle du curseur ;
o SEEK_END : indique la fin du fichier.
Voici quelques exemples pour bien comprendre comment on jongle
avec deplacement et origine .
• Le code suivant place le curseur deux caractères après le début :
fseek(fichier, 2, SEEK_SET);
• Le code suivant place le curseur quatre caractères avant la position courante :
fseek(fichier, 0, SEEK_END);
Si vous écrivez après avoir fait un fseek qui mène à la fin du fichier, cela ajoutera vos
informations à la suite dans le fichier (le fichier sera complété).
En revanche, si vous placez le curseur au début et que vous écrivez, cela écrasera le texte
qui se trouvait là. Il n'y a pas de moyen d'insérer de texte dans le fichier, à moins de coder
soi-même une fonction qui lit les caractères d'après pour s'en souvenir avant de les écraser
!
3. Replacez le curseur au début du fichier avec rewind
Cette fonction est équivalente à utiliser fseek pour nous renvoyer à la position 0 dans le
fichier.
return 0;
}
En résumé
• La bibliothèque standard fournit des fonctions pour pouvoir manipuler les fichiers ;
cependant, il ne faut pas oublier d’inclure les bibliothèques stdio.h et stdlib.h .
• La fonction fopen permet d’ouvrir un fichier. Il faut préciser en paramètre le chemin
vers le fichier, et indiquer le mode d'ouverture pour travailler sur le fichier selon
votre besoin.
• Les fonctions fputc , fputs et fprintf permettent d’écrire dans un fichier.
• Pour lire dans un fichier, il faut utiliser les fonctions fgetc , fgets et fscanf .
• Toujours fermer le fichier à l’aide de la fonction fclose après avoir terminé les
manipulations sur celui-ci.