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 );
}
  
  

Equivalência do .NET Framework

Consulte também

Referência

Fluxo de i/O

fopen, _wfopen

ftell, _ftelli64

_lseek, _lseeki64

retroceder