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
_doserrno
et _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