fseek, _fseeki64
Move o ponteiro de arquivo para 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 de origin.origin
Posição inicial.
Valor de retorno
Se for bem-sucedido, fseek e _fseeki64 Retorna 0. Caso contrário, retornará um valor diferente de zero.Incapaz de busca de dispositivos, o valor retornado é indefinido.If 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 for permitida para continuar, essas funções conjunto errno para EINVAL e retornar -1.
Comentários
The fseek e _fseeki64 funções move o ponteiro de arquivo (se houver) associada stream para um novo local é offset bytes do origin*.* A próxima operação no fluxo ocorre no novo local.Em um fluxo em aberto para atualização, a próxima operação pode ser uma leitura ou gravar.A origem de argumento deve ser uma das seguintes constantes definidas na STDIO.H:
SEEK_CUR
Posição corrente do ponteiro de arquivo.SEEK_END
participante 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 participante do arquivo.fseek and _fseeki64clears the end-of-file indicator and negates the effect of any prior ungetc calls against stream.
Quando um arquivo é aberto para acrescentar dados, a posição corrente do arquivo é determinada pela última operação de E/s, não pelos onde ocorrerá a próxima gravar.Se ainda não tiver ocorrido nenhuma operação de E/s em um arquivo aberto para acrescentar, a posição do arquivo é o início do arquivo.
For streams opened in text mode, fseek and _fseeki64have limited use, because carriage return–linefeed translations can cause fseek and _fseeki64to produce unexpected results.The only fseek and _fseeki64operations guaranteed to work on streams opened in text mode are:
Buscando com um deslocamento de 0 em relação a qualquer um dos valores de origem.
Seeking from the beginning of the file with an offset value returned from a call to ftell when using fseekor _ftelli64when using_fseeki64.
Também no modo de texto CTRL+Z é interpretado sistema autônomo um caractere de participante de arquivo na entrada.Em arquivos abertos para leitura/gravação, fopen e todas as rotinas relacionadas verificar se há um CTRL+Z no participante do arquivo e removê-la se possível. This is done because using the combination of fseek and ftellor_fseeki64 and _ftelli64, to move within a file that ends with a CTRL+Z may cause fseek or _fseeki64 to behave improperly near the end of the file.
Quando a CRT abre um arquivo que comece com uma BOM (marca de ordem de byte), o ponteiro do arquivo é posicionado após a BOM (isto é, no início do conteúdo real do arquivo).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 sem bloqueio, consulte _fseek_nolock, _fseeki64_nolock.
Requisitos
Função |
Cabeçalho necessário |
---|---|
fseek |
<stdio.h> |
_fseeki64 |
<stdio.h> |
Para obter informações adicionais 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 );
}
File pointer is set to middle of first line. This is the file 'fseek.out'.