FSEEK |
Position dans le fichier |
---|---|
Langage C | 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 d'effectuer la position du pointeur de fichier.
Algorithme
MODULE FSEEK(stream, offset, whence) SI stream est NULL ALORS RETOURNE erreur "Flux non valide" FIN SI SI whence est invalide (n'est pas SEEK_SET, SEEK_CUR ou SEEK_END) ALORS RETOURNE erreur "Valeur de whence invalide" FIN SI SI l'accès au fichier est impossible pour modifier la position ALORS RETOURNE erreur "Impossible de déplacer le curseur" FIN SI EVALUER whence CAS SEEK_SET Positionner le curseur à l'offset par rapport au début du fichier CAS SEEK_CUR Positionner le curseur à l'offset relatif à la position actuelle CAS SEEK_END Positionner le curseur à l'offset relatif à la fin du fichier FIN EVALUER SI le déplacement est réussi ALORS RETOURNE 0 * Succès SINON RETOURNE une erreur (par exemple, -1) * Si le déplacement échoue FIN SI |
Remarques
- Positionnement flexible dans un fichier avec fseek : La fonction fseek en langage de programmation C est utilisée pour déplacer le curseur de lecture/écriture à une position précise dans un fichier ouvert. Elle utilise trois paramètres : un pointeur vers le fichier, un déplacement (offset) en octets, et une constante d'origine (SEEK_SET, SEEK_CUR, ou SEEK_END). Cette flexibilité permet un contrôle précis et rapide de la position dans le fichier.
- Utilisation de fseek pour lire ou écrire à des positions spécifiques : En définissant un point de départ et un déplacement (offset), fseek facilite la navigation dans des fichiers, ce qui est particulièrement utile pour des opérations non séquentielles. Elle permet, par exemple, de se déplacer directement à une position spécifique pour lire ou modifier un enregistrement précis dans un fichier binaire ou structuré.
- Rôle de fseek dans la gestion de la taille de fichiers : fseek est couramment utilisé pour déterminer la taille d'un fichier. En plaçant le curseur à la fin du fichier avec fseek(file, 0, SEEK_END), puis en appelant ftell, on obtient la taille totale en octets. Cette méthode est rapide et évite la lecture séquentielle de tout le contenu du fichier.
- Précautions avec les fichiers texte et multi-octets : Lorsqu'il est utilisé en mode texte, fseek peut se comporter de manière imprévisible selon le système, surtout avec les encodages multi-octets. Certains caractères, comme les sauts de ligne, peuvent être interprétés différemment, affectant la position réelle du curseur. En mode binaire, en revanche, fseek assure une position exacte en octets.
- Limites de fseek pour les flux non repositionnables : fseek ne fonctionne pas avec tous les types de flux de données. Sur des flux standards comme stdin ou stdout, où la position ne peut pas être modifiée (non-repositionnable), fseek renvoie une erreur. Cela en limite l'utilisation aux fichiers supportant le repositionnement du curseur.
- Retour de la fonction pour vérifier les erreurs : fseek retourne 0 en cas de succès et -1 en cas d'échec, permettant ainsi de détecter les erreurs de positionnement. Il est essentiel de vérifier ce retour pour éviter des comportements inattendus, comme tenter d'aller au-delà des limites d'un fichier ou manipuler un fichier ayant été fermé.
- Comparaison avec fsetpos pour le positionnement : fseek et fsetpos servent tous deux à positionner le curseur, mais fseek utilise un offset en octets et est plus direct pour les calculs. fsetpos, en revanche, utilise un type de position fpos_t, plus précis en mode texte avec des encodages complexes. En conséquence, fseek est plus courant pour les fichiers binaires ou simples, tandis que fsetpos est préféré pour des compatibilités multi-plateformes et des encodages multi-octets.
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 :
Essayer maintenant !
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.