ftell, _ftelli64

取得檔案指標的目前位置。

語法

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

參數

stream
FILE 結構為目標。

傳回值

ftell_ftelli64 傳回目前的檔案位置。 和 _ftelli64ftell 傳回的值可能不會反映在文字模式中開啟之資料流程的實體位元組位移,因為文字模式會導致歸位字元換行字元轉譯。 搭配 或 _ftelli64 搭配 fseek_fseeki64 使用 ftell ,以正確返回檔案位置。 發生錯誤, ftell_ftelli64 叫用不正確參數處理常式,如參數驗證 中所述 。 如果允許繼續執行,這些函式會傳回 -1L,並將 設定 errno 為中定義的兩個常數之 ERRNO.H 一。 EBADF常數表示自 stream 變數不是有效的檔案指標值,或未參考開啟的檔案。 EINVAL 表示無效的 stream。 在無法搜尋的裝置上(例如終端機和印表機),或未參考開啟的檔案時 stream ,不會定義傳回值。

如需傳回碼的詳細資訊,請參閱 errno_doserrno_sys_errlist_sys_nerr

備註

_ftelli64ftell 式會擷取與 stream 相關聯的檔案指標目前位置(如果有的話)。 位置以相對於資料流開頭的位移表示。

檔案因為附加資料而開啟時,目前的檔案位置取決於最後一個 I/O 作業,而不是下一次寫入的位置。 例如,假設已開啟附加的檔案,而最後一個作業是讀取的。 檔案位置是下一個讀取作業開始的位置,而不是下一個寫入開始的位置。 (開啟檔案以附加時,檔案位置會在任何寫入作業之前移至檔案的結尾。如果開啟的檔案尚未進行 I/O 作業以附加,檔案位置就是檔案的開頭。

在文字模式中,Ctrl+Z 會在輸入時被解譯成檔案結尾字元。 在檔案開啟供讀取/寫入時,fopen 和所有相關的常式檢查檔案結尾是否有 CTRL+Z,並在可能時將它移除。 這是因為使用 和 fseek 、 或 _ftelli64_fseeki64 的組合 ftell ,在以 CTRL+Z 結尾的檔案內移動,可能會導致 ftell_ftelli64 行為不當接近檔案結尾。

此函式執行期間會鎖定呼叫執行緒,因此為安全執行緒。 如需非鎖定版本,請參閱 _ftell_nolock

根據預設,此函式的全域狀態會限定于應用程式。 若要變更此行為,請參閱 CRT 中的全域狀態。

需求

函式 必要的標頭 選擇性標頭
ftell <stdio.h> <errno.h>
_ftelli64 <stdio.h> <errno.h>

如需相容性詳細資訊,請參閱相容性

範例

// 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

另請參閱

資料流 I/O
fopen, _wfopen
fgetpos
fseek, _fseeki64
_lseek, _lseeki64