fseek

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu stdio.h - Index

Header-Datei

stdio.h

Kategorie

Routinen für die Eingabe/Ausgabe

Prototyp

int fseek(FILE *stream, long offset, int whence);
int _fseeki64(FILE *stream, __int64 offset, int whence);

Beschreibung

Versetzt den Dateizeiger eines Streams an eine neue Position.

fseek setzt den mit dem Stream verbundenen Dateizeiger an eine neue Position, die offset Bytes von der durch whence angegebenen Position entfernt ist. Bei Streams im Textmodus sollte offset 0 oder einen von ftell zurückgegebenen Wert enthalten.

whence muss einen der Werte 0, 1 oder 2 enthalten; diese Werte repräsentieren drei in stdio.h definierte symbolische Konstanten mit folgender Bedeutung:

SEEK_SET

0

Dateianfang

  • Wenn stream im Binärmodus ist, wird fseek den Dateizeiger auf offset-Bytes vom Anfang der Datei setzen.
  • Wenn stream im Textmodus ist, wird fseek den Dateizeiger entsprechend dem offset-Wert setzen. offset kann entweder null (Dateianfang) oder einen von einem vorherigen erfolgreichen ftell-Aufruf zurückgegebenen Wert (eine andere Position in der Datei) sein. Der offset-Wert ist nicht eine Byte-Anzahl und weder das Addieren noch das Subtrahieren werden deshalb möglich.

SEEK_CUR

1

Aktuell Dateizeigerposition

  • Wenn stream im Binärmodus ist, wird offset von fseek zum aktuellen Dateizeigerwert hinzugefügt.
  • Wenn stream im Textmodus ist, muss offset null sein (der Dateizeiger wird auf seine aktuelle Wert bleiben und die aktuelle Position in der Datei wird beibehalten.)

SEEK_END

2

Dateiende

  • Wenn stream im Binärmodus ist, wird fseek offset-Bytes vom Ende der Datei hinzufügen (der Dateizeiger wird vielleicht nach einer beliebigen Anzahl von null Zeichen positioniert).
  • Wenn stream im Textmodus ist, muss offset null sein (Dateiende).

fseek verwirft alle mit ungetc zurückgestellten Zeichen. fseek wird für die Eingabe/Ausgabe der Streams verwendet; verwenden Sie für E/A des Datei-Handle die Funktion lseek.

Nach fseek kann die nächste Operation mit einer zum Aktualisieren geöffneten Datei eine Eingabe oder eine Ausgabe sein.

Rückgabewert

Konnte der Dateizeiger erfolgreich neu positioniert werden, gibt fseek 0, bei einem Fehler einen Wert ungleich Null zurück.

Bei einem Fehler wird die globale Variable errno auf einen der folgenden Werte gesetzt:

EBADF

Ungültiger Dateizeiger

EINVAL

Ungültiges Argument

ESPIPE

Ungültige Neupositionierung auf dem Gerät


Beispiel

#include <stdio.h>
long filesize(FILE *stream);
int main(void)
{
   FILE *stream;
   stream = fopen("MYFILE.TXT", "w+");
   fprintf(stream, "This is a test");
   printf("Filesize of MYFILE.TXT is %ld bytes\n", filesize(stream));
   fclose(stream);
   return 0;
}
long filesize(FILE *stream)
{
   long curpos, length;
   curpos = ftell(stream);
   fseek(stream, 0L, SEEK_END);
   length = ftell(stream);
   fseek(stream, curpos, SEEK_SET);
   return length;
}


Portabilität

POSIX Win32 ANSI C ANSI C++

+

+

+

+