Programmer en langage C
186
© Éditions Eyrolles
3.1 Accès direct en lecture sur un fichier existant
Le programme ci-dessus permet d’accéder à n’importe quel entier d’un fichier du type de ceux
que pouvait créer notre programme de la section 2.1.
La principale nouveauté réside essentiellement dans l’appel de la fonction fseek :
fseek ( entree, sizeof(int)*(num-1), SEEK_SET) ;
Cette dernière possède trois arguments :
●
le fichier concerné (désigné par le pointeur sur une structure de type FILE, tel qu’il a été
fourni par fopen) ;
●
un entier de type long spécifiant la valeur que l’on souhaite donner au pointeur de fichier.
Il faut noter que l’on dispose de trois manières d’agir effectivement sur le pointeur, le
choix entre les trois étant fait par l’argument suivant ;
●
le choix du mode d’action sur le pointeur de fichier : il est défini par une constante entière.
Les valeurs suivantes sont prédéfinies dans :
• SEEK_SET (en général 0) : le second argument désigne un déplacement (en octets)
depuis le début du fichier ;
• SEEK_CUR (en général 1) : le second argument désigne un déplacement exprimé à partir
de la position courante ; il s’agit donc en quelque sorte d’un déplacement relatif dont la
valeur peut, le cas échéant, être négative ;
• SEEK_END (en général 2) : le second argument désigne un déplacement depuis la fin du
fichier.
Accès direct en lecture sur un fichier existant
#include
main()
{ char nomfich[21] ;
int n ;
long num ;
FILE * entree ;
printf ("nom du fichier à consulter : ") ;
scanf ("%20s", nomfich) ;
entree = fopen (nomfich, "r") ;
while ( printf (" numéro de l’entier recherché : "),
scanf ("%ld", &num), num )
{ fseek (entree, sizeof(int)*(num-1), SEEK_SET) ;
fread (&n, sizeof(int), 1, entree) ;
printf (" valeur : %d \n", n) ;
}
fclose (entree) ;
Delannoy Livre.book Page 186 Mercredi, 6. mai 2009 4:26 16
Précédent

- 199/281

Suivant