Compartir vía


ftell, _ftelli64

Obtiene la posición actual de un puntero de archivo.

Sintaxis

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

Parámetros

stream
Estructura FILE de destino.

Valor devuelto

ftell y _ftelli64 devuelven la posición de archivo actual. Puede que los valores devueltos por ftell y _ftelli64 no reflejen el desplazamiento físico en bytes en secuencias abiertas en modo de texto, porque el modo de texto provoca la traslación de retorno de carro–avance de línea. Use ftell con fseek o _ftelli64 con _fseeki64 para volver correctamente a las ubicaciones de archivo. En caso de error, ftell e _ftelli64 invoque el controlador de parámetros no válidos, como se describe en Validación de parámetros. Si la ejecución puede continuar, estas funciones devuelven –1L y establecen errno en una de dos constantes, que se definen en ERRNO.H. La constante EBADF indica que el argumento stream no es un valor de puntero de archivo válido o no hace referencia a un archivo abierto. EINVAL indica que se ha pasado un argumento stream no válido a la función. En dispositivos que no pueden realizar búsquedas (como terminales e impresoras) o cuando stream no hace referencia a un archivo abierto, el valor devuelto es indefinido.

Para obtener más información sobre los códigos de retorno, vea errno, _doserrno, _sys_errlist y _sys_nerr.

Comentarios

Las funciones ftell y _ftelli64 recuperan la posición actual del puntero de archivo (si existe) que está asociado a stream. La posición se expresa como un desplazamiento en relación con el principio del flujo.

Cuando un archivo se abre para anexar datos, la posición de archivo actual se determina con la última operación de E/S, no en función de dónde se produciría la siguiente escritura. Por ejemplo, supongamos que se abre un archivo para un anexo y la última operación fue una lectura. La posición del archivo es el punto donde se iniciaría la siguiente operación de lectura, no donde se iniciaría la siguiente escritura. (Cuando se abre un archivo para anexar, la posición del archivo se mueve al final del archivo antes de cualquier operación de escritura). Si todavía no se ha producido ninguna operación de E/S en un archivo abierto para anexar, la posición del archivo es el principio del archivo.

En modo de texto, CTRL+Z se interpreta como un carácter de final de archivo en la entrada. En archivos abiertos para lectura/escritura, fopen y todas las rutinas relacionadas buscan un CTRL+Z al final del archivo y, si es posible, lo eliminan. Se debe a que el uso de la combinación de ftell y fseek, o _ftelli64 y _fseeki64, para moverse dentro de un archivo que termina con ctrl+Z puede provocar ftell o _ftelli64 comportarse incorrectamente cerca del final del archivo.

Esta función bloquea el subproceso de llamada durante la ejecución y por lo tanto es segura para subprocesos. Para consultar una versión que no realiza el bloqueo, vea _ftell_nolock.

De manera predeterminada, el estado global de esta función está limitado a la aplicación. Para cambiar este comportamiento, consulte Estado global en CRT.

Requisitos

Función Encabezado necesario Encabezados opcionales
ftell <stdio.h> <errno.h>
_ftelli64 <stdio.h> <errno.h>

Para obtener más información sobre compatibilidad, consulte Compatibilidad.

Ejemplo

// 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

Consulte también

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