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 , _fseeki64
para 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