ftell
, _ftelli64
取得檔案指標的目前位置。
語法
long ftell(
FILE *stream
);
__int64 _ftelli64(
FILE *stream
);
參數
stream
以 FILE
結構為目標。
傳回值
ftell
和 _ftelli64
傳回目前的檔案位置。 和 _ftelli64
所ftell
傳回的值可能不會反映在文字模式中開啟之數據流的實體位元移,因為文字模式會導致歸位字元換行字元轉譯。 搭配 或 _ftelli64
搭配fseek
_fseeki64
使用 ftell
,以正確返回檔案位置。 發生錯誤,ftell
並_ftelli64
叫用無效的參數處理程式,如參數驗證中所述。 如果允許繼續執行,這些函式會傳回 -1L,並將 設定 errno
為中定義的兩個常數之 ERRNO.H
一。 EBADF
常數表示自stream
變數不是有效的檔案指標值,或未參考開啟的檔案。 EINVAL
表示無效的 stream
。 在無法搜尋的裝置上(例如終端機和印表機),或未參考開啟的檔案時 stream
,不會定義傳回值。
如需傳回碼的詳細資訊,請參閱errno
、 _doserrno
_sys_errlist
和 _sys_nerr
。
備註
和 _ftelli64
函ftell
式會擷取與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