Partilhar via


ftell, _ftelli64

Obtém a posição atual de um ponteiro de arquivo.

Sintaxe

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

Parâmetros

stream
Estrutura FILE de destino.

Valor retornado

ftell e _ftelli64 retornam a posição do arquivo atual. O valor retornado por ftell e _ftelli64 pode não refletir o deslocamento de bytes físico para fluxos abertos no modo de texto porque o modo de texto causa uma conversão de feed de linha de retorno de carro. Use ftell com fseek ou _ftelli64 com _fseeki64 para retornar para os locais de arquivo corretamente. Em caso de erro ftell e _ftelli64 invoque o manipulador de parâmetro inválido, conforme descrito em Validação de parâmetro. Se a execução puder continuar, essas funções retornarão –1L e definirão errno como uma de duas constantes, definida em ERRNO.H. A constante EBADF significa que o argumento stream não é um valor de ponteiro de arquivo válido ou não faz referência a um arquivo aberto. EINVAL significa que um argumento stream inválido foi passado para a função. Em dispositivos incapazes de fazer buscas (como terminais e impressoras) ou quando stream não se referir a um arquivo aberto, o valor retornado será indefinido.

Para obter mais informações sobre códigos de retorno, confira errno, _doserrno, _sys_errlist e _sys_nerr.

Comentários

A funções ftell e _ftelli64 recuperam a posição atual do ponteiro do arquivo (se houver) associado a stream. A posição é expressa como um deslocamento relativo ao início do fluxo.

Quando um arquivo é aberto para acrescentar dados, a posição do arquivo atual é determinada pela última operação de E/S e não por onde a gravação seguinte ocorreria. Por exemplo, suponha que um arquivo seja aberto para um acréscimo e a última operação tenha sido uma leitura. A posição do arquivo é o ponto em que a próxima operação de leitura começaria, não onde a próxima gravação começaria. (Quando um arquivo é aberto para acrescentar, a posição do arquivo é movida para o final do arquivo antes de qualquer operação de gravação.) Se nenhuma operação de E/S ainda tiver ocorrido em um arquivo aberto para acrescentar, a posição do arquivo será o início do arquivo.

No modo de texto, CTRL+Z é interpretado como um caractere de fim do arquivo na entrada. Em arquivos abertos para leitura/gravação, fopen e todas as rotinas relacionadas verificam se há um CTRL+Z no fim do arquivo e o removem, se possível. Isso ocorre porque usar a combinação de e fseek, ou _ftelli64 e , _fseeki64para mover dentro de ftell um arquivo que termina com CTRL+Z pode causar ftell ou _ftelli64 se comportar de maneira inadequada perto do final do arquivo.

Essa função bloqueia o thread de chamada durante a execução e, portanto, é thread-safe. Para uma versão sem bloqueio, consulte _ftell_nolock.

Por padrão, o estado global dessa função tem como escopo o aplicativo. Para alterar esse comportamento, confira Estado global no CRT.

Requisitos

Função Cabeçalho necessário Cabeçalhos opcionais
ftell <stdio.h> <errno.h>
_ftelli64 <stdio.h> <errno.h>

Para obter informações sobre compatibilidade, consulte Compatibilidade.

Exemplo

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

Confira também

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