FSEEK |
Position dans le fichier |
---|---|
Langage C++ | cstdio (stdio.h) |
Syntaxe
int fseek(FILE *ptrfichier,long offset,int base) |
Paramètres
Nom | Description | |
---|---|---|
ptrfichier | Ce paramètre permet d'indiquer l'identificateur du fichier | |
offset | Ce paramètre permet d'indiquer la position du pointeur dans le fichier | |
base | Ce paramètre permet d'indiquer le mode d'ouverture combiné du fichier | |
Constante | Description | |
SEEK_CUR | Cette constante indique un positionnement à partir de la position courante dans le fichier | |
SEEK_END | Cette valeur indique un positionnement à partir de la position de la fin dans le fichier | |
SEEK_SET | Cette valeur indique un positionnement à partir de la position du début dans le fichier |
Description
Cette fonction permet de fixer le positionnement du pointeur de fichier.
Remarques
- La fonction fseek() définit l'indicateur de position de fichier associé au flux de données en fonction des valeurs de déplacement et d'origine. Son objectif est de prendre en charge les opérations d'entrée/sortie à accès aléatoire. Le déplacement est le nombre d'octets de l'origine à rechercher. Les valeurs d'origine doivent être l'une de ces macros définies dans l'entête cstdio.
- Une valeur de retour de zéro signifie que la fonction fseek() a réussi. Une valeur différente de zéro indique un échec.
- Vous pouvez utiliser la fonction fseek() pour déplacer l'indicateur de position n'importe où dans le fichier, même au-delà de la fin. Cependant, c'est une erreur de tenter de régler l'indicateur de position avant le début du fichier.
- La fonction fseek() efface l'indicateur de fin de fichier associé au flux de données spécifié. De plus, il annule tout ungetc() antérieur sur le même flux de données.
- Déplacement dans un fichier : La fonction fseek permet de déplacer le curseur de lecture/écriture dans un fichier ouvert. Elle est particulièrement utile pour naviguer dans de gros fichiers sans devoir tout lire séquentiellement. Cela améliore l'efficacité des opérations de lecture et d'écriture sur des fichiers binaires ou structurés.
- Utilisation avec SEEK_END pour connaître la taille d'un fichier : Une utilisation courante de fseek est d'obtenir la taille d'un fichier en se plaçant à la fin et en utilisant ftell :
- Ne fonctionne pas toujours sur les fichiers texte : Bien que fseek fonctionne bien sur les fichiers binaires, son comportement sur les fichiers texte est moins prévisible, surtout si le fichier contient des caractères spéciaux comme \n sur Windows. En mode texte, certains systèmes ne garantissent pas un déplacement correct des offset, rendant fseek moins fiable.
- Compatibilité avec ftell : ftell permet de connaître la position actuelle du curseur dans un fichier, ce qui est utile pour se déplacer avec fseek :
- Retour et gestion des erreurs : fseek retourne 0 en cas de succès et -1 en cas d'échec. Une gestion correcte des erreurs est essentielle :
- Utilisation avec des fichiers binaires pour accès structuré : Dans les fichiers binaires, fseek est souvent utilisé pour accéder directement à des structures spécifiques :
Cette technique est utile pour allouer dynamiquement de la mémoire en fonction de la taille du fichier.
Cette combinaison est souvent utilisée pour gérer des fichiers de manière efficace.
Une erreur peut survenir si l'on tente de dépasser la taille du fichier ou si le fichier n'est pas accessible.
Cela permet d'accéder rapidement à des données structurées sans lecture séquentielle.
Exemple
Prenons pour acquis que le fichier «readtext.txt» est le contenu :
Ceci est un exemple de fseek 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++) {
- fseek(Handle,I * 8, SEEK_SET);
- 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:see
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 - fopen
Langage de programmation - C++ - Référence de procédures et fonctions - fsetpos
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 - rewind
Langage de programmation - C - Référence de procédures et fonctions - fseek
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 114.