© Éditions Eyrolles
189
chapitre n° 10
Les fichiers
b) Tentative de positionnement hors fichier
Lorsque l’on accède ainsi directement à l’information d’un fichier, le risque existe de tenter de
se positionner... en dehors du fichier. En principe, la fonction fseek fournit :
●
la valeur 0 lorsque le positionnement s’est déroulé correctement ;
●
une valeur quelconque dans le cas contraire.
Toutefois, beaucoup d’implémentations ne respectent pas la norme à ce sujet. Dans ces conditions, il nous paraît plus raisonnable de programmer une protection efficace en déterminant, en
début de programme, la taille effective du fichier à consulter. Pour cela, il suffit de vous positionner en fin de fichier avec fseek, puis de faire appel à la fonction ftell qui restitue la
position courante du pointeur de fichier. Ainsi, dans notre précédent programme, nous pourrions
introduire les instructions :
long taille ;
.....
fseek (entree, 0, SEEK_END) ;
taille = ftell (entree) ;
Il suffit alors de vérifier que la position de l’enregistrement demandé (ici : sizeof(int*
(num-1)) est bien inférieure à la valeur de taille pour éviter tout problème.
4 Les entrées-sorties formatées et les fichiers de texte
Nous venons de voir que les fonctions fread et fwrite réalisent un transfert d’information
(entre mémoire et fichier) que l’on pourrait qualifier de brut, dans le sens où il se fait sans
aucune transformation de l’information. Les octets qui figurent dans le fichier sont des copies
conformes de ceux qui apparaissent en mémoire.
Mais, en langage C, il est également possible d’accompagner ces transferts d’information
d’opérations de formatage analogues à celles que réalisent printf ou scanf.
Les fichiers concernés par ces opérations de formatage sont alors ce que l’on a coutume
d’appeler des « fichiers de type texte » ou encore des « fichiers de texte ». Ce sont des fichiers
que vous pouvez manipuler avec un éditeur ou un traitement de texte quelconques ou, encore
plus simplement, lister par les commandes appropriées du système d’exploitation (TYPE ou
PRINT sous DOS, pr ou more sous UNIX...).
Dans de tels fichiers, chaque octet représente un caractère. Généralement, on y trouve des
caractères de fin de ligne (\n), de sorte qu’ils apparaissent comme une suite de lignes. Les
fonctions permettant de travailler avec des fichiers de texte ne sont rien d’autre qu’une généralisation de celles que nous avons déjà rencontrées pour les entrées-sorties conversationnelles.
Delannoy Livre.book Page 189 Mercredi, 6. mai 2009 4:26 16
189
chapitre n° 10
Les fichiers
b) Tentative de positionnement hors fichier
Lorsque l’on accède ainsi directement à l’information d’un fichier, le risque existe de tenter de
se positionner... en dehors du fichier. En principe, la fonction fseek fournit :
●
la valeur 0 lorsque le positionnement s’est déroulé correctement ;
●
une valeur quelconque dans le cas contraire.
Toutefois, beaucoup d’implémentations ne respectent pas la norme à ce sujet. Dans ces conditions, il nous paraît plus raisonnable de programmer une protection efficace en déterminant, en
début de programme, la taille effective du fichier à consulter. Pour cela, il suffit de vous positionner en fin de fichier avec fseek, puis de faire appel à la fonction ftell qui restitue la
position courante du pointeur de fichier. Ainsi, dans notre précédent programme, nous pourrions
introduire les instructions :
long taille ;
.....
fseek (entree, 0, SEEK_END) ;
taille = ftell (entree) ;
Il suffit alors de vérifier que la position de l’enregistrement demandé (ici : sizeof(int*
(num-1)) est bien inférieure à la valeur de taille pour éviter tout problème.
4 Les entrées-sorties formatées et les fichiers de texte
Nous venons de voir que les fonctions fread et fwrite réalisent un transfert d’information
(entre mémoire et fichier) que l’on pourrait qualifier de brut, dans le sens où il se fait sans
aucune transformation de l’information. Les octets qui figurent dans le fichier sont des copies
conformes de ceux qui apparaissent en mémoire.
Mais, en langage C, il est également possible d’accompagner ces transferts d’information
d’opérations de formatage analogues à celles que réalisent printf ou scanf.
Les fichiers concernés par ces opérations de formatage sont alors ce que l’on a coutume
d’appeler des « fichiers de type texte » ou encore des « fichiers de texte ». Ce sont des fichiers
que vous pouvez manipuler avec un éditeur ou un traitement de texte quelconques ou, encore
plus simplement, lister par les commandes appropriées du système d’exploitation (TYPE ou
PRINT sous DOS, pr ou more sous UNIX...).
Dans de tels fichiers, chaque octet représente un caractère. Généralement, on y trouve des
caractères de fin de ligne (\n), de sorte qu’ils apparaissent comme une suite de lignes. Les
fonctions permettant de travailler avec des fichiers de texte ne sont rien d’autre qu’une généralisation de celles que nous avons déjà rencontrées pour les entrées-sorties conversationnelles.
Delannoy Livre.book Page 189 Mercredi, 6. mai 2009 4:26 16
