fseek
, _fseeki64
Verschiebt den Dateizeiger in einen angegebenen Speicherort
Syntax
int fseek(
FILE *stream,
long offset,
int origin
);
int _fseeki64(
FILE *stream,
__int64 offset,
int origin
);
Parameter
stream
Zeiger zur FILE
-Struktur.
offset
Anzahl der Bytes aus origin
origin
Ursprüngliche Position.
Rückgabewert
fseek
und _fseeki64
geben bei Erfolg 0 zurück. Andernfalls gibt es einen Wert ungleich 0 (null) zurück. Auf Geräten, die Suchvorgänge nicht unterstützen, ist der Rückgabewert nicht definiert. Wenn stream
es sich um einen Nullzeiger handelt oder es origin
sich nicht um einen der unten beschriebenen zulässigen Werte handelt, fseek
und _fseeki64
rufen Sie den ungültigen Parameterhandler auf, wie in der Parameterüberprüfung beschrieben. Wenn die weitere Ausführung zugelassen wird, stellen diese Funktionen errno
auf EINVAL
ein und geben -1 zurück.
Hinweise
Mit fseek
den Funktionen wird _fseeki64
der Dateizeiger (falls vorhanden) stream
an einen neuen Speicherort verschoben, offset
von dem Bytes stammen origin
. Der nächste Vorgang im Stream tritt am neuen Speicherort auf. Für einen updatebereiten Stream kann der nächste Vorgang ein Lese- oder Schreibvorgang sein. Das Argument origin
muss eine der folgenden Konstanten sein, die in STDIO.H
:
Origin-Wert | Bedeutung |
---|---|
SEEK_CUR |
Aktuelle Position des Dateizeigers |
SEEK_END |
Ende der Datei |
SEEK_SET |
Anfang der Datei |
Sie können fseek
und _fseeki64
verwenden, um den Zeiger an einer beliebigen Stelle in einer Datei neu zu positionieren. Der Zeiger kann auch nach dem Ende der Datei positioniert werden. fseek
und _fseeki64
löscht den End-of-File-Indikator und negiert die Wirkung aller vorherigen ungetc
Aufrufe gegen stream
.
Wenn eine Datei zum Anfügen von Daten geöffnet wird, wird die aktuelle Dateiposition vom letzten E/A-Vorgang nicht dadurch bestimmt, wo der nächste Schreibvorgang erfolgt. Wenn noch kein E/A-Vorgang für eine zum Anhängen geöffnete Datei stattgefunden hat, ist die Dateiposition der Anfang der Datei.
Für Datenströme, die im Textmodus geöffnet wurden und fseek
_fseeki64
eingeschränkt verwendet werden, da Wagenrücklauf-Zeilenvorschubübersetzungen zu unerwarteten Ergebnissen führen und _fseeki64
zu unerwarteten Ergebnissen führen fseek
können. Die einzigen fseek
Und _fseeki64
Vorgänge, die garantiert an Datenströmen funktionieren, die im Textmodus geöffnet wurden, sind:
Suchen mit einem Offset von 0 hinsichtlich der ursprünglichen Werte
Suchen sie vom Anfang der Datei mit einem Offsetwert, der von einem Aufruf
ftell
bei Verwendungfseek
oder_ftelli64
bei Verwendung_fseeki64
zurückgegeben wird.
Im Textmodus wird STRG+Z als ein Dateiendezeichen in der Eingabe interpretiert. In für Lese-/Schreibvorgänge geöffneten Dateien, überprüfen fopen
und alle verknüpften Routinen das Dateiende auf STRG+Z und entfernt die Markierung, sofern möglich. Es wird entfernt, da die Verwendung der Kombination von fseek
und oder ftell
oder _ftelli64
_fseeki64
, um innerhalb einer Datei zu verschieben, die mit einem STRG+Z endet, möglicherweise zu einem unsachgemäßen Verhalten am Ende der Datei führen fseek
oder _fseeki64
verhalten.
Wenn das CRT eine Datei öffnet, die mit einem Byte Order Mark (BOM) beginnt, wird der Dateizeiger nach der BOM positioniert. (Das heißt, sie wird am Anfang des tatsächlichen Inhalts der Datei positioniert). Wenn Sie am Anfang der Datei müssen fseek
, verwenden ftell
Sie diese, um die Anfangsposition abzurufen, und dann fseek
an diese Position statt an position 0.
Diese Funktion sperrt alle anderen Threads während der Ausführung und ist daher threadsicher. Eine nicht sperrende Version finden Sie unter _fseek_nolock
, _fseeki64_nolock
.
Standardmäßig gilt der globale Zustand dieser Funktion für die Anwendung. Wie Sie dieses Verhalten ändern, erfahren Sie unter Globaler Status in der CRT.
Anforderungen
Funktion | Erforderlicher Header |
---|---|
fseek |
<stdio.h> |
_fseeki64 |
<stdio.h> |
Weitere Informationen zur Kompatibilität finden Sie unter Kompatibilität.
Beispiel
// 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'.
Siehe auch
Stream-E/A
fopen
, _wfopen
ftell
, _ftelli64
_lseek
, _lseeki64
rewind