fseek, _fseeki64
Przesuwa wskaźnik pliku do określonej lokalizacji.
int fseek(
FILE *stream,
long offset,
int origin
);
int _fseeki64(
FILE *stream,
__int64 offset,
int origin
);
Parametry
stream
Wskaźnik, aby FILE struktury.offset
Liczba bajtów z origin.origin
Początkowe położenie.
Wartość zwracana
W przypadku powodzenia, fseek i _fseeki64 zwraca wartość 0.W przeciwnym razie zwraca wartość różną od zera.Na urządzeniach niezdolny do poszukiwania wartość zwracana jest niezdefiniowany.Jeśli stream jest wskaźnik null, lub jeśli origin nie jest jedną z wartości dozwolonych opisane poniżej, fseek i _fseeki64 wywołania obsługi nieprawidłowy parametr, jak opisano w Sprawdzanie poprawności parametru.Jeśli wykonanie może kontynuować, ustaw te funkcje errno do EINVAL i zwraca –1.
Uwagi
fseek i _fseeki64 funkcje przenosi wskaźnik 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 nowej lokalizacji.W strumieniu otwarte dla aktualizacji następna operacja może być odczytu lub zapisu.Pochodzenie argument musi być jedną z następujących stałych, określonych w STDIO.H:
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ć również umieszczony poza końcem pliku.fseeki _fseeki64czyści wskaźnik końca pliku i neguje wpływ wszelkich przed ungetc wywołuje przeciwko stream.
Gdy plik jest otwarty w celu dołączania danych, bieżącej pozycji w pliku jest ustalona przez ostatniej operacji We/Wy nie gdzie mogłoby wystąpić następnego zapisu.Jeśli operacja We/Wy, nie ma jeszcze na pliku otwartym dołączania wystąpił położenie pliku jest początku pliku.
Dla strumieni otwartych w trybie tekstowym fseek i _fseeki64mają ograniczone stosowania, ponieważ tłumaczenia ze zmianą wiersza przewozu może spowodować fseek i _fseeki64do dawać nieoczekiwane wyniki.Jedynymi fseek i _fseeki64są operacje gwarantowane do pracy nad strumieni otwartych w trybie tekstowym:
Poszukiwanie z przesunięciem od 0 w stosunku do wartości pochodzenia.
Poszukiwanie od początku pliku plus wartość przesunięcia zwrócony z wywołania ftell podczas korzystania z fseeklub _ftelli64podczas korzystania z_fseeki64.
Również w trybie tekstowym, CTRL + Z jest interpretowana jako znaku końca pliku na dane wejściowe.W przypadku plików otwartych do odczytu/zapisu fopen i wszystkie powiązane procedury Sprawdź, czy klawisze CTRL + Z końcem pliku i usunąć go, jeśli to możliwe.Robi się, ponieważ przy użyciu kombinacji z fseek i ftelllub_fseeki64 i _ftelli64, aby przenieść w pliku, który może powodować kończy się na CTRL + Z fseek lub _fseeki64 do niewłaściwe w pobliżu końca pliku.
Gdy CRT otwiera plik, który rozpoczyna się z znacznik porządku bajtów (BOM), wskaźnik pliku jest umieszczony po BOM-U (to znaczy na początku pliku rzeczywistej zawartości).Jeśli masz do fseek na początku pliku, użyj ftell Aby uzyskać początkowe położenie i fseek do niej, a nie do pozycji 0.
Ta funkcja blokuje się inne wątki podczas wykonywania i dlatego wielowątkowość.Blokowania wersji, zobacz _fseek_nolock, _fseeki64_nolock.
Wymagania
Funkcja |
Wymaganego nagłówka |
---|---|
fseek |
<stdio.h> |
_fseeki64 |
<stdio.h> |
Aby uzyskać dodatkowe informacje o zgodności, zobacz zgodności 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 );
}