Partager via


ftell, _ftelli64

Obtient la position actuelle d’un pointeur de fichier.

Syntaxe

long ftell(
   FILE *stream
);
__int64 _ftelli64(
   FILE *stream
);

Paramètres

stream
Structure FILE cible.

Valeur retournée

ftell et _ftelli64 retournent la position de fichier actuelle. La valeur retournée par ftell et _ftelli64 peut ne pas refléter le décalage d’octet physique pour les flux ouverts en mode texte, car le mode texte provoque la traduction de flux de retour chariot. Utilisez ftell ou _ftelli64 avec fseek _fseeki64 pour revenir correctement aux emplacements de fichier. En cas d’erreur, ftell et _ftelli64 appelez le gestionnaire de paramètres non valide, comme décrit dans la validation des paramètres. Si l’exécution est autorisée à continuer, ces fonctions retournent -1L et définissent errno sur l’une des deux constantes, définies dans ERRNO.H. La EBADF constante signifie que l’argument stream n’est pas une valeur de pointeur de fichier valide ou ne fait pas référence à un fichier ouvert. EINVAL signifie qu’un argument stream non valide a été passé à la fonction. Sur les appareils incapables de rechercher (par exemple, les terminaux et les imprimantes) ou lorsqu’ils stream ne font pas référence à un fichier ouvert, la valeur de retour n’est pas définie.

Pour plus d’informations sur les codes de retour, consultez , , _sys_errlist_doserrnoet _sys_nerr.errno

Notes

Les ftell fonctions et _ftelli64 récupèrent la position actuelle du pointeur de fichier (le cas échéant) associé stream. La position est exprimée sous la forme d’un décalage par rapport au début du flux.

Quand un fichier est ouvert pour un ajout de données, la position de fichier actuelle est déterminée par la dernière opération d’E/S, pas par l’emplacement auquel l’écriture suivante se produirait. Par exemple, supposons qu’un fichier est ouvert pour un ajout et que la dernière opération était une lecture. La position du fichier est le point où l’opération de lecture suivante démarrerait, et non l’emplacement où l’écriture suivante démarrerait. (Lorsqu’un fichier est ouvert pour l’ajout, la position du fichier est déplacée vers la fin du fichier avant toute opération d’écriture.) Si aucune opération d’E/S n’a encore eu lieu sur un fichier ouvert pour l’ajout, la position du fichier est le début du fichier.

En mode texte, Ctrl+Z est interprété comme un caractère de fin de fichier en entrée. Dans les fichiers ouverts en lecture/écriture, fopen et toutes les routines connexes recherchent un Ctrl+Z à la fin du fichier et le suppriment, si possible. C’est parce que l’utilisation de la combinaison de ftell et fseek, ou _ftelli64 et _fseeki64, pour se déplacer dans un fichier qui se termine par une ctrl+Z peut entraîner ftell ou _ftelli64 se comporter de manière incorrecte près de la fin du fichier.

Cette fonction verrouille le thread appelant pendant l’exécution et est donc thread-safe. Pour une version sans verrouillage, voir _ftell_nolock.

Par défaut, l’état global de cette fonction est limité à l’application. Pour modifier ce comportement, consultez État global dans le CRT.

Spécifications

Fonction En-tête requis En-têtes facultatifs
ftell <stdio.h> <errno.h>
_ftelli64 <stdio.h> <errno.h>

Pour plus d’informations sur la compatibilité, consultez Compatibility.

Exemple

// crt_ftell.c
// This program opens a file named CRT_FTELL.C
// for reading and tries to read 100 characters. It
// then uses ftell to determine the position of the
// file pointer and displays this position.

#include <stdio.h>

FILE *stream;

int main( void )
{
   long position;
   char list[100];
   if( fopen_s( &stream, "crt_ftell.c", "rb" ) == 0 )
   {
      // Move the pointer by reading data:
      fread( list, sizeof( char ), 100, stream );
      // Get position after read:
      position = ftell( stream );
      printf( "Position after trying to read 100 bytes: %ld\n",
              position );
      fclose( stream );
   }
}
Position after trying to read 100 bytes: 100

Voir aussi

E/S de flux
fopen, _wfopen
fgetpos
fseek, _fseeki64
_lseek, _lseeki64