fseek, _fseeki64
Move o ponteiro de arquivo em um local especificado.
int fseek(
FILE *stream,
long offset,
int origin
);
int _fseeki64(
FILE *stream,
__int64 offset,
int origin
);
Parâmetros
stream
Ponteiro para FILE estrutura.offset
Número de bytes do origin.origin
Posição inicial.
Valor de retorno
Se for bem-sucedido, fseek e _fseeki64 retorna 0.Caso contrário, ele retornará um valor diferente de zero.Incapaz de busca de dispositivos, o valor de retorno é indefinido.Se stream é um ponteiro nulo, ou se origin não é um dos valores permitidos descritos abaixo, fseek e _fseeki64 chamar o manipulador de parâmetro inválido, conforme descrito em Validação de parâmetro.Se a execução terá permissão para continuar, essas funções definir errno para EINVAL e retornar -1.
Comentários
O fseek e _fseeki64 funciona move o ponteiro do arquivo (se houver) associado a stream para um novo local é offset bytes de origin*.* A próxima operação no fluxo ocorre no novo local.Em um fluxo aberto para a atualização, a próxima operação pode ser uma leitura ou uma gravação.A origem do argumento deve ser uma das seguintes constantes, definidas em STDIO.H:
SEEK_CUR
Posição atual do ponteiro de arquivo.SEEK_END
Fim do arquivo.SEEK_SET
Início do arquivo.
Você pode usar fseek e _fseeki64 para reposicionar o ponteiro em qualquer lugar em um arquivo.O ponteiro também pode ser posicionado além do fim do arquivo.fseeke _fseeki64limpa o indicador de final de arquivo, além de neutralizar o efeito de qualquer antes do ungetc chama-se contra stream.
Quando um arquivo é aberto para acrescentar dados, a posição atual do arquivo é determinada pela última operação de e/S, não por onde ocorrerá a próxima gravação.Se nenhuma operação de e/S ainda tiver ocorrido em um arquivo aberto para acrescentar, a posição do arquivo é o início do arquivo.
Para fluxos abertos no modo de texto, fseek e _fseeki64limitaram o uso, como as traduções do carro e alimentação de linha podem causar fseek e _fseeki64para produzir resultados inesperados.A única fseek e _fseeki64operações garantidas para trabalhar em fluxos abertos no modo de texto são:
Buscando com um deslocamento de 0 em relação a qualquer um dos valores de origem.
Buscando desde o início do arquivo com um valor de deslocamento retornado de uma chamada para ftell ao usar fseekou _ftelli64ao usar_fseeki64.
Também no modo de texto, CTRL + Z é interpretado como um caractere de final de arquivo na entrada.Em arquivos abertos para leitura/gravação, fopen e todas as rotinas relacionadas verificar um CTRL + Z no final do arquivo e removê-lo, se possível.Isso é feito porque utilizando a combinação de fseek e ftellou_fseeki64 e _ftelli64, para mover-se dentro de um arquivo que termina com um CTRL + Z pode causar fseek ou _fseeki64 se comporte incorretamente próximo ao final do arquivo.
Quando a CRT abre um arquivo que começa com uma marca de ordem de Byte (BOM), o ponteiro de arquivo é posicionado após o BOM (ou seja, no início do conteúdo do arquivo real).Se você tiver que fseek para o início do arquivo, use ftell para obter a posição inicial e fseek a ele em vez da posição 0.
Esta função bloqueia outros threads durante a execução e, portanto, é thread-safe.Para obter uma versão não-bloqueio, consulte _fseek_nolock, _fseeki64_nolock.
Requisitos
Função |
Cabeçalho necessário |
---|---|
fseek |
<stdio.h> |
_fseeki64 |
<stdio.h> |
Para obter informações adicionais de compatibilidade, consulte compatibilidade na introdução.
Exemplo
// crt_fseek.c
// This program opens the file FSEEK.OUT and
// moves the pointer to the file's beginning.
#include <stdio.h>
int main( void )
{
FILE *stream;
char line[81];
int result;
if ( fopen_s( &stream, "fseek.out", "w+" ) != 0 )
{
printf( "The file fseek.out was not opened\n" );
return -1;
}
fprintf( stream, "The fseek begins here: "
"This is the file 'fseek.out'.\n" );
result = fseek( stream, 23L, SEEK_SET);
if( result )
perror( "Fseek failed" );
else
{
printf( "File pointer is set to middle of first line.\n" );
fgets( line, 80, stream );
printf( "%s", line );
}
fclose( stream );
}