FSETPOS |
Fixe la position dans le fichier |
---|---|
Langage C++ | cstdio (stdio.h) |
Syntaxe
int fsetpos(FILE *ptrfichier,const fpos_t *pos); |
Paramètres
Nom | Description |
---|---|
ptrfichier | Ce paramètre permet d'indiquer l'identificateur du fichier |
pos | Ce paramètre permet d'indiquer la position du pointeur dans le fichier |
Description
Cette fonction permet de fixer la position du pointeur de fichier.
Remarques
- La fonction fsetpos() déplace l'indicateur de position du fichier au point spécifié par l'objet pointé par position. Cette valeur doit avoir été préalablement obtenue via un appel à fgetpos(). Une fois la fonction fsetpos() exécuté, l'indicateur de fin de fichier est réinitialisé. De plus, tout appel précédent à ungetc() est annulé.
- Si la fonction fsetpos() échoue, elle retourne une valeur différente de zéro. Si elle réussit, elle renvoie zéro.
- Fonctionnalité et utilité : La fonction fsetpos est utilisée pour positionner le pointeur de fichier à une position spécifique dans un flux de fichier binaire ou texte. Contrairement à fseek, prenant une valeur en octets et une origine, fsetpos utilise un objet fpos_t pour gérer des positions de fichier, ce étant particulièrement utile pour les systèmes où la taille des positions ne se limite pas à long.
- Retour et gestion d'erreurs : fsetpos retourne 0 en cas de succès et une valeur non nulle en cas d'échec. Les erreurs peuvent survenir si le fichier n'est pas ouvert en lecture/écriture, si la position est invalide ou si un problème matériel se produit (comme un disque plein). Pour diagnostiquer une erreur, on peut utiliser perror() ou errno.
- Compatibilité et Portabilité : fsetpos est souvent plus portable que fseek car il utilise fpos_t, étant défini par l'implémentation du compilateur et peut s'adapter à différentes architectures. Cela est particulièrement pertinent pour des systèmes où les positions de fichiers dépassent la capacité d'un simple entier (long).
- Relation avec fgetpos : fsetpos est généralement utilisée en complément de fgetpos, permettant de récupérer la position actuelle du pointeur de fichier et de la stocker dans une variable fpos_t. Cette combinaison est utile pour sauvegarder et restaurer une position particulière d'un fichier sans avoir à gérer directement des déplacements en octets.
- Utilisation avec des fichiers texte vs binaires : Dans les fichiers texte, fsetpos peut ne pas fonctionner de manière prévisible sur certaines plateformes car la représentation interne de la position peut dépendre du format de la nouvelle ligne (\n peut être entreposé différemment selon le système d'exploitation). Avec les fichiers binaires, le positionnement est plus fiable et direct.
- Limites et contraintes : fsetpos ne permet pas d'effectuer des déplacements relatifs par rapport au début, à la fin ou à la position courante, contrairement à fseek. On ne peut repositionner le fichier qu'en utilisant une position préalablement obtenue avec fgetpos, ce qui peut être une contrainte dans certains cas d'utilisation nécessitant des sauts relatifs.
Exemples
Prenons pour acquis que le fichier «readtext.txt» est le contenu :
Ceci est un exemple de fsetpos sur le site de Gladir.comVoici un exemple montrant une utilisation plus classique de cette fonction :

- #include <iostream>
- #include <cstdio>
- #include <cstdlib>
-
- int main()
- {
- FILE * Handle = fopen("readtext.txt", "r");
- if(Handle != NULL) {
- char Temp[4];
- int I;
- Temp[3] = 0;
- for(I = 0; I <= 3; I++) {
- fpos_t P;
- P.__pos = I * 8;
- fsetpos(Handle,&P);
- fread(&Temp,3,1,Handle);
- std::cout << I << ":" << Temp << std::endl;
- }
- fclose(Handle);
- }
- return 0;
- }
on obtiendra le résultat suivant :
0:Cec1: un
2:ple
3:set
Voici un exemple illustrant l'utilisation de fsetpos avec fgetpos :
- #include <cstdio>
-
- int main() {
- FILE *file = fopen("example.txt", "r");
- if (!file) return 1;
-
- fpos_t pos;
- if (fgetpos(file, &pos) == 0) {
- printf("Position initiale enregistrée.\n");
- }
-
- // Lire quelques caractères
- char buffer[10];
- fread(buffer, 1, 5, file);
-
- // Restaurer la position
- if (fsetpos(file, &pos) == 0) {
- printf("Position restaurée.\n");
- }
-
- fclose(file);
- return 0;
- }
Cet exemple sauvegarde la position actuelle avec fgetpos, lit quelques caractères, puis restaure la position initiale avec fsetpos.
Voir également
Langage de programmation - C++ - Référence de procédures et fonctions - fgetpos
Langage de programmation - C++ - Référence de procédures et fonctions - fseek
Langage de programmation - C++ - Référence de procédures et fonctions - ftell
Langage de programmation - C - Référence de procédures et fonctions - fsetpos
Références
Langage C, Edition Micro-Application, Gehard Willms, 2001, ISBN: 2-7429-2008-0, page 732.
Borland C++ for Windows 4.0, Library Reference, Edition Borland, 1993, Part # BCP1240WW21772, page 115.