Share via


ftell, _ftelli64

Ruft die aktuelle Position eines Dateizeigers ab

Syntax

long ftell(
   FILE *stream
);
__int64 _ftelli64(
   FILE *stream
);

Parameter

stream
Zielstruktur von FILE

Rückgabewert

ftell und _ftelli64 geben die aktuelle Dateiposition zurück. Der zurückgegebene ftell Wert entspricht _ftelli64 möglicherweise nicht dem physischen Byte-Offset für Datenströme, die im Textmodus geöffnet wurden, da der Textmodus eine Wagenrücklaufvorschubübersetzung verursacht. Verwenden Sie die Verwendung ftell mit fseek oder _ftelli64 mit _fseeki64 der Rückkehr zu Dateispeicherorten ordnungsgemäß. On error, ftell and _ftelli64 invoke the invalid parameter handler, as described in Parameter validation. Wenn die Ausführung fortgesetzt werden darf, geben diese Funktionen -1L zurück und legen errno sie auf eine von zwei Konstanten fest, die in ERRNO.H. Die EBADF Konstante bedeutet, dass das stream Argument kein gültiger Dateizeigerwert ist oder nicht auf eine geöffnete Datei verweist. EINVAL bedeutet, dass ein ungültiges stream-Argument an die Funktion übergeben wurde. Auf Geräten, die nicht suchen können (z. B. Terminals und Drucker), oder wenn stream nicht auf eine geöffnete Datei verwiesen wird, ist der Rückgabewert nicht definiert.

Weitere Informationen zu Rückgabecodes finden Sie unter , , _doserrno, _sys_errlistund _sys_nerr.errno

Hinweise

Mit ftell den Funktionen wird _ftelli64 die aktuelle Position des Dateizeigers (sofern vorhanden) abgerufen, der zugeordnet streamist. Die Position wird als ein Offset relativ zum Anfang des Streams ausgedrückt.

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. Angenommen, eine Datei wird für eine Anfüge geöffnet, und der letzte Vorgang war ein Lesevorgang. Die Dateiposition ist der Punkt, an dem der nächste Lesevorgang gestartet würde, nicht an der Stelle, an der der nächste Schreibvorgang gestartet würde. (Wenn eine Datei zum Anfügen geöffnet wird, wird die Dateiposition vor einem Schreibvorgang an das Ende der Datei verschoben.) Wenn noch kein E/A-Vorgang für eine datei aufgetreten ist, die zum Anfügen geöffnet wurde, ist die Dateiposition der Anfang der Datei.

Im Textmodus wird STRG+Z in der Eingabe als Dateiendezeichen 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. Dies liegt daran, dass die Verwendung der Kombination aus ftell und , fseekoder _ftelli64 und _fseeki64, um innerhalb einer Datei zu verschieben, die mit einem STRG+Z endet, zu einer fehlerhaften Verhaltensweise am Ende der Datei führen ftell oder _ftelli64 verhalten.

Diese Funktion sperrt den aufrufenden Thread während der Ausführung und ist threadsicher. Eine nicht sperrende Version finden Sie unter _ftell_nolock.

Standardmäßig gilt der globale Zustand dieser Funktion für die Anwendung. Informationen zum Ändern dieses Verhaltens finden Sie im Global state in the CRT.

Anforderungen

Funktion Erforderlicher Header Optionale Header
ftell <stdio.h> <errno.h>
_ftelli64 <stdio.h> <errno.h>

Weitere Informationen zur Kompatibilität finden Sie unter Kompatibilität.

Beispiel

// crt_ftell.c
// This program opens a file named CRT_FTELL.C
// for reading and tries to read 100 characters. It
// then uses ftell to determine the position of the
// file pointer and displays this position.

#include <stdio.h>

FILE *stream;

int main( void )
{
   long position;
   char list[100];
   if( fopen_s( &stream, "crt_ftell.c", "rb" ) == 0 )
   {
      // Move the pointer by reading data:
      fread( list, sizeof( char ), 100, stream );
      // Get position after read:
      position = ftell( stream );
      printf( "Position after trying to read 100 bytes: %ld\n",
              position );
      fclose( stream );
   }
}
Position after trying to read 100 bytes: 100

Siehe auch

Stream-E/A
fopen, _wfopen
fgetpos
fseek, _fseeki64
_lseek, _lseeki64