© Éditions Eyrolles
187
chapitre n° 10
Les fichiers
En général, ces constantes auront la valeur indiquée (0, 1 et 2). Toutefois, la norme n’impose
pas précisément ces valeurs ; elle se contente d’imposer l’existence des trois constantes symboliques que l’on aura donc intérêt à utiliser si l’on souhaite assurer la portabilité des programmes
concernés.
Ici, il s’agit de donner au pointeur de fichier une valeur correspondant à l’emplacement d’un
entier (sizeof(int) octets) dont l’utilisateur fournit le rang. Il est donc naturel de donner
au troisième argument la valeur 0. Notez, au passage, la formule :
sizeof(int) * (num-1)
qui se justifie par le fait que nous avons convenu que, pour l’utilisateur, le premier entier du
fichier porterait le rang 1 et non 0.
3.2 Les possibilités de l’accès direct
Outre les possibilités de consultation immédiate qu’il procure, l’accès direct facilite et accélère
les opérations de mise à jour d’un fichier.
Mais, de surcroît, l’accès direct permet de remplir un fichier de façon quelconque. Ainsi, nous
pourrions constituer notre fichier d’entiers en laissant l’utilisateur fournir ces entiers dans
l’ordre de son choix, comme dans cet exemple de programme :
Création d’un fichier en accès direct
#include
main()
{ char nomfich[21] ;
FILE * sortie ;
long num ;
int n ;
printf ("nom fichier : ") ;
scanf ("%20s",nomfich) ;
sortie = fopen (nomfich, "w") ;
while (printf("\nrang de l’entier : "), scanf("%ld",&num), num)
{ printf ("valeur de l’entier : ") ;
scanf ("%d", &n) ;
fseek (sortie, sizeof(int)*(num-1), SEEK_SET) ;
fwrite (&n, sizeof(int), 1, sortie) ;
}
fclose(sortie) ;
Delannoy Livre.book Page 187 Mercredi, 6. mai 2009 4:26 16
187
chapitre n° 10
Les fichiers
En général, ces constantes auront la valeur indiquée (0, 1 et 2). Toutefois, la norme n’impose
pas précisément ces valeurs ; elle se contente d’imposer l’existence des trois constantes symboliques que l’on aura donc intérêt à utiliser si l’on souhaite assurer la portabilité des programmes
concernés.
Ici, il s’agit de donner au pointeur de fichier une valeur correspondant à l’emplacement d’un
entier (sizeof(int) octets) dont l’utilisateur fournit le rang. Il est donc naturel de donner
au troisième argument la valeur 0. Notez, au passage, la formule :
sizeof(int) * (num-1)
qui se justifie par le fait que nous avons convenu que, pour l’utilisateur, le premier entier du
fichier porterait le rang 1 et non 0.
3.2 Les possibilités de l’accès direct
Outre les possibilités de consultation immédiate qu’il procure, l’accès direct facilite et accélère
les opérations de mise à jour d’un fichier.
Mais, de surcroît, l’accès direct permet de remplir un fichier de façon quelconque. Ainsi, nous
pourrions constituer notre fichier d’entiers en laissant l’utilisateur fournir ces entiers dans
l’ordre de son choix, comme dans cet exemple de programme :
Création d’un fichier en accès direct
#include
main()
{ char nomfich[21] ;
FILE * sortie ;
long num ;
int n ;
printf ("nom fichier : ") ;
scanf ("%20s",nomfich) ;
sortie = fopen (nomfich, "w") ;
while (printf("\nrang de l’entier : "), scanf("%ld",&num), num)
{ printf ("valeur de l’entier : ") ;
scanf ("%d", &n) ;
fseek (sortie, sizeof(int)*(num-1), SEEK_SET) ;
fwrite (&n, sizeof(int), 1, sortie) ;
}
fclose(sortie) ;
Delannoy Livre.book Page 187 Mercredi, 6. mai 2009 4:26 16
