FTELL |
Dire la position dans le fichier |
---|---|
Langage C | stdio.h |
Syntaxe
long ftell(FILE *ptrfichier); |
Paramètres
Nom | Description |
---|---|
ptrfichier | Ce paramètre permet d'indiquer l'identificateur de fichier |
Description
Cette fonction permet de connaître la position du pointeur de fichier.
Algorithme
MODULE FTELL(stream) SI stream est NULL ALORS RETOURNE erreur "Flux non valide" FIN SI * Vérifier si le flux est ouvert en lecture ou écriture : SI le flux n'est pas ouvert correctement ALORS RETOURNE erreur "Impossible d'obtenir la position" FIN SI * Obtenir la position actuelle du curseur dans le flux: Calculer le nombre d'octets entre le début du fichier et le curseur actuel SI la position est valide ALORS RETOURNE la position (sous forme de long int) SINON RETOURNE -1 pour indiquer une erreur FIN SI |
Remarques
- Utilité de ftell pour la gestion des fichiers : La fonction ftell est utilisée en langage de programmation C pour obtenir la position actuelle du curseur de lecture/écriture dans un fichier ouvert. Elle renvoie la position sous forme d'un entier de type long int, représentant le nombre d'octets depuis le début du fichier. Cette fonction est particulièrement utile pour vérifier où se situe la lecture ou l'écriture lors de la manipulation de fichiers.
- Utilisation de ftell avec fseek pour une navigation flexible : ftell est souvent utilisé en combinaison avec fseek pour naviguer dans un fichier. Tandis que fseek déplace le curseur à une position spécifique, ftell permet de connaître la position courante, ce qui est utile pour enregistrer, restaurer ou vérifier la position du curseur après des opérations de lecture ou d'écriture.
- Gestion des erreurs avec ftell : Lorsque la fonction ftell échoue, elle retourne -1 pour indiquer une erreur et définit la variable globale errno. Les erreurs peuvent survenir si le fichier n'est pas ouvert ou si le fichier est un flux de données ne prenant pas en charge les positions, comme un flux de données standard d'entrée ou de sortie. Il est donc essentiel de vérifier le retour de ftell pour s'assurer du bon fonctionnement.
- Compatibilité avec les fichiers binaires et textes : ftell fonctionne aussi bien avec les fichiers binaires qu'avec les fichiers textes, mais il peut se comporter différemment en fonction de ces modes. Sur certains systèmes, les fichiers textes peuvent entraîner des positions non continues ou des traductions de retour à la ligne modifiant l'indice du curseur, ce qui peut affecter la précision du résultat.
- Interprétation des valeurs de retour : La valeur de retour de ftell peut être utilisée pour calculer la taille des fichiers si le curseur est placé à la fin avec fseek. En plaçant le curseur à la fin et en appelant ftell, on obtient le nombre total d'octets du fichier, ce qui est une méthode simple pour connaître sa taille sans le lire entièrement.
- Non-applicabilité sur tous les types de flux de données : ftell ne fonctionne pas sur tous les types de flux de données. Les flux de données comme stdin, stdout ou stderr ne prennent pas en charge ftell car ils n'ont pas de position de curseur spécifique, ce qui restreint son usage aux fichiers standards accessibles depuis le système de fichiers.
- Influence de l'encodage et de la plateforme : Sur certaines plateformes, l'encodage du fichier (ASCII, UTF-8, UTF-16) ou le système d'exploitation (Windows, Unix) peut influencer la précision de ftell en mode texte, où certains caractères ou séquences sont interprétés différemment. Par conséquent, l'utilisation de ftell en mode binaire est souvent préférée pour garantir une cohérence des positions, surtout sur les systèmes multilingues.
Exemple
Prenons pour acquis que le fichier «readtext.txt» est le contenu :
GGGGGGLLLLLLLAAAAAADDDDDDIIIIIRRRRRVoici un exemple positionnement aléatoire utilisant cette fonction pour connaitre la position actuel :
Essayer maintenant !
- #include <stdio.h>
- #include <stdlib.h>
-
- 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++) {
- int P = (rand() % 10) * 3;
- fsetpos(Handle,&P);
- fread(&Temp,3,1,Handle);
- int P2 = ftell(Handle);
- printf("Position courante %i, passage %i, bloc lue :%s\n",P2,I,Temp);
- }
- fclose(Handle);
- }
- return 0;
- }
on obtiendra le résultat semblable suivant :
Position courante 6, passage 0, bloc lue :GGGPosition courante 24, passage 1, bloc lue :DDD
Position courante 15, passage 2, bloc lue :LAA
Position courante 3, passage 3, bloc lue :GGG
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 - fsetpos
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 - ftell
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 118.