© Éditions Eyrolles
191
chapitre n° 10
Les fichiers
chariot \r, suivi de fin de ligne \n). Or, dans ce cas, pour qu’un programme C puisse ne voir
qu’un seul caractère de fin de ligne et qu’il s’agisse bien de \n, il faut opérer un traitement
particulier consistant à :
• remplacer chaque occurrence de ce couple de caractères par \n, dans le cas d’une lecture,
• remplacer chaque demande d’écriture de \n par l’écriture de ce couple de caractères.
Bien entendu, de telles substitutions ne doivent pas être réalisées sur de vrais fichiers binaires.
Il faut donc bien pouvoir opérer une distinction au sein du programme. Cette distinction se fait
au moment de l’ouverture du fichier, en ajoutant l’une des lettres t (pour « texte ») ou b (pour
« binaire ») au mode d’ouverture.
En général, dans les implémentations où l’on distingue les fichiers de texte des autres, les
fonctions d’entrées-sorties formatées refusent de travailler avec un fichier qui n’a pas été
spécifié de ce type lors de son ouverture.
5 Les différentes possibilités d’ouverture d’un fichier
Dans nos précédents exemples, nous n’avons utilisé que les modes w et r. Nous vous fournissons ici la liste des différentes possibilités offertes par fopen.
r : lecture seulement ; le fichier doit exister.
w : écriture seulement. Si le fichier n’existe pas, il est créé. S’il existe, son (ancien) contenu est
perdu.
a : écriture en fin de fichier (append). Si le fichier existe déjà, il sera étendu. S’il n’existe pas,
il sera créé – on se ramène alors au mode w.
r+ : mise à jour (lecture et écriture). Le fichier doit exister. Notez qu’alors il n’est pas possible
de réaliser une lecture à la suite d’une écriture ou une écriture à la suite d’une lecture, sans
positionner le pointeur de fichier par fseek. Il est toutefois possible d’enchaîner plusieurs
lectures ou écritures consécutives (de façon séquentielle).
w+ : création pour mise à jour. Si le fichier existe, son (ancien) contenu sera détruit. S’il
n’existe pas, il sera créé. Notez que l’on obtiendrait un mode comparable à w+ en ouvrant un
fichier vide (mais existant) en mode r+.
a+ : extension et mise à jour. Si le fichier n’existe pas, il sera créé. S’il existe, le pointeur sera
positionné en fin de fichier.
t ou b : lorsque l’implémentation distingue les fichiers de texte des autres, il est possible
d’ajouter l’une de ces deux lettres à chacun des 6 modes précédents. La lettre t précise que
l’on a affaire à un fichier de texte ; la lettre b précise que l’on a affaire à un fichier binaire. (On
dit aussi que t correspond au mode « translaté », pour spécifier que certaines substitutions
auront lieu).
Delannoy Livre.book Page 191 Mercredi, 6. mai 2009 4:26 16
191
chapitre n° 10
Les fichiers
chariot \r, suivi de fin de ligne \n). Or, dans ce cas, pour qu’un programme C puisse ne voir
qu’un seul caractère de fin de ligne et qu’il s’agisse bien de \n, il faut opérer un traitement
particulier consistant à :
• remplacer chaque occurrence de ce couple de caractères par \n, dans le cas d’une lecture,
• remplacer chaque demande d’écriture de \n par l’écriture de ce couple de caractères.
Bien entendu, de telles substitutions ne doivent pas être réalisées sur de vrais fichiers binaires.
Il faut donc bien pouvoir opérer une distinction au sein du programme. Cette distinction se fait
au moment de l’ouverture du fichier, en ajoutant l’une des lettres t (pour « texte ») ou b (pour
« binaire ») au mode d’ouverture.
En général, dans les implémentations où l’on distingue les fichiers de texte des autres, les
fonctions d’entrées-sorties formatées refusent de travailler avec un fichier qui n’a pas été
spécifié de ce type lors de son ouverture.
5 Les différentes possibilités d’ouverture d’un fichier
Dans nos précédents exemples, nous n’avons utilisé que les modes w et r. Nous vous fournissons ici la liste des différentes possibilités offertes par fopen.
r : lecture seulement ; le fichier doit exister.
w : écriture seulement. Si le fichier n’existe pas, il est créé. S’il existe, son (ancien) contenu est
perdu.
a : écriture en fin de fichier (append). Si le fichier existe déjà, il sera étendu. S’il n’existe pas,
il sera créé – on se ramène alors au mode w.
r+ : mise à jour (lecture et écriture). Le fichier doit exister. Notez qu’alors il n’est pas possible
de réaliser une lecture à la suite d’une écriture ou une écriture à la suite d’une lecture, sans
positionner le pointeur de fichier par fseek. Il est toutefois possible d’enchaîner plusieurs
lectures ou écritures consécutives (de façon séquentielle).
w+ : création pour mise à jour. Si le fichier existe, son (ancien) contenu sera détruit. S’il
n’existe pas, il sera créé. Notez que l’on obtiendrait un mode comparable à w+ en ouvrant un
fichier vide (mais existant) en mode r+.
a+ : extension et mise à jour. Si le fichier n’existe pas, il sera créé. S’il existe, le pointeur sera
positionné en fin de fichier.
t ou b : lorsque l’implémentation distingue les fichiers de texte des autres, il est possible
d’ajouter l’une de ces deux lettres à chacun des 6 modes précédents. La lettre t précise que
l’on a affaire à un fichier de texte ; la lettre b précise que l’on a affaire à un fichier binaire. (On
dit aussi que t correspond au mode « translaté », pour spécifier que certaines substitutions
auront lieu).
Delannoy Livre.book Page 191 Mercredi, 6. mai 2009 4:26 16
