fseek, _fseeki64
Przesuwa wskaźnik pliku w określonej lokalizacji.
int fseek(
FILE *stream,
long offset,
int origin
);
int _fseeki64(
FILE *stream,
__int64 offset,
int origin
);
Parametry
stream
Wskaźnik na FILE strukturę.offset
Liczba bajtów z origin.origin
Początkowe położenie.
Wartość zwracana
Jeśli to się powiedzie, fseek i _fseeki64 zwraca wartość 0.W przeciwnym wypadku zwraca wartość różną od zera.Na urządzeniach niezdolny do znalezienia wartość zwracana jest niezdefiniowany.Jeśli stream jest pusty wskaźnik, lub jeśli origin nie jest jedną z wartości dozwolonych opisane poniżej, fseek i _fseeki64 wywołania obsługi nieprawidłowy parametr, zgodnie z opisem w Sprawdzanie poprawności parametru.Jeśli wykonanie może być kontynuowane, te funkcje ustawiają errno na EINVAL i zwracają wartość -1.
Uwagi
fseek i _fseeki64 funkcje ruchów wskaźnika pliku (jeśli istnieje) skojarzone z stream do nowej lokalizacji, która jest offset bajtów z origin*.* Następna operacja w strumieniu odbywa się w nowym miejscu.W strumieniu otwarty do aktualizacji następna operacja może być odczytu lub zapisu.Pochodzenie argument musi mieć jedną z następujących stałych zdefiniowanych w STDIO.GODZ.:
SEEK_CUR
Bieżąca pozycja wskaźnika pliku.SEEK_END
Koniec pliku.SEEK_SET
Początek pliku.
Można użyć fseek i _fseeki64 , aby przesunąć kursor w dowolnym miejscu w pliku.Wskaźnik może być także umieszczony poza końcem pliku.fseeki _fseeki64 czyści wskaźnik końca pliku i neguje efekt wszelkie uprzednie ungetc wywołuje przeciwko stream.
Po otwarciu pliku na dołączanie danych bieżącej pozycji w pliku zależy od ostatniej operacji We/Wy nie przez gdy nastąpi następny zapis mogą się pojawić.Jeśli jeszcze nie powstała żadnej operacji We/Wy na pliku otwartym dołączania, położenie pliku jest na początku pliku.
Dla strumieni otwartych w trybie tekstowym fseek i _fseeki64 ograniczone zastosowanie, ponieważ mogą powodować przewozu powrotu-znak wysuwu wiersza tłumaczenia fseek i _fseeki64 dawać nieoczekiwane wyniki.Jedynym fseek i _fseeki64 operacje gwarantowane na strumieni otwartych w trybie tekstowym są:
Poszukiwanie z przesunięciem 0 w stosunku do wartości pochodzenia.
Poszukiwanie od początku pliku wartość przesunięcia zwrócony w wyniku wywołania ftell podczas korzystania z fseek lub _ftelli64 podczas korzystania z _fseeki64.
Również w trybie tekstowym, CTRL + Z jest interpretowana jako znak końca pliku na wejściu.W przypadku plików otwartych do odczytu/zapisu fopen i wszystkich powiązanych procedur Wyszukaj CTRL + Z końcem pliku i usunąć go, jeśli to możliwe.To zrobić, ponieważ za pomocą kombinacji fseek i ftell lub _fseeki64 i _ftelli64, aby przenieść w pliku, który może powodować kończy CTRL + Z fseek lub _fseeki64 będzie działać nieprawidłowo w pobliżu koniec pliku.
Gdy CRT otwiera plik, który rozpoczyna się z znacznik porządku bajtów (BOM), wskaźnik pliku jest umieszczony za BOM-u (to znaczy na początku rzeczywistej zawartości pliku).Jeśli masz do fseek na początku pliku, należy użyć ftell Aby uzyskać początkowego położenia i fseek do niego, a nie do pozycji 0.
Ta funkcja powoduje zablokowanie inne wątki podczas wykonywania i dlatego wątków.Aby uzyskać informacje na temat wersji bez blokady, zobacz _fseek_nolock, _fseeki64_nolock.
Wymagania
Funkcja |
Wymagany nagłówek |
---|---|
fseek |
<stdio.h> |
_fseeki64 |
<stdio.h> |
Dodatkowe informacje o zgodności – zobacz: Zgodność we Wprowadzeniu.
Przykład
// 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 );
}