ftell、_ftelli64ftell, _ftelli64

ファイル ポインターの現在の位置を取得します。Gets the current position of a file pointer.


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


ターゲットファイルの構造。Target FILE structure.

戻り値Return Value

ftell_ftelli64は、現在のファイルの位置を返します。ftell and _ftelli64 return the current file position. テキストモードでは復帰と改行の変換が行われるため、 ftell_ftelli64によって返される値には、テキストモードで開かれたストリームの物理バイトオフセットが反映されない場合があります。The value returned by ftell and _ftelli64 may not reflect the physical byte offset for streams opened in text mode, because text mode causes carriage return-line feed translation. Ftellまたは _ftelli64_fseeki64と共に使用して、ファイルの場所に適切に戻ります。Use ftell with fseek or _ftelli64 with _fseeki64 to return to file locations correctly. エラーが発生した場合、 ftell_ftelli64は、「パラメーターの検証」で説明されているように、無効なパラメーターハンドラーを呼び出します。On error, ftell and _ftelli64 invoke the invalid parameter handler, as described in Parameter Validation. 実行の継続が許可された場合、これらの関数は-1L を返し、errno に指定されている2つの定数のいずれかに errnoを設定します。始め.If execution is allowed to continue, these functions return -1L and set errno to one of two constants, defined in ERRNO.H. EBADF定数は、ストリーム引数が有効なファイルポインター値ではないか、開いているファイルを参照していないことを意味します。The EBADF constant means the stream argument is not a valid file pointer value or does not refer to an open file. EINVALは、無効なストリーム引数が関数に渡されたことを意味します。EINVAL means an invalid stream argument was passed to the function. (端末やプリンターなどの) シークが不可能なデバイス、またはストリームが開いているファイルを参照していない場合、戻り値は未定義になります。On devices incapable of seeking (such as terminals and printers), or when stream does not refer to an open file, the return value is undefined.

リターン コードの詳細については、「_doserrno、errno、_sys_errlist、_sys_nerr」をご覧ください。See _doserrno, errno, _sys_errlist, and _sys_nerr for more information on these, and other, return codes.


Ftell関数と _ftelli64関数は、ストリームに関連付けられているファイルポインターの現在位置 (存在する場合) を取得します。The ftell and _ftelli64 functions retrieve the current position of the file pointer (if any) associated with stream. 位置は、ストリームの先頭を基準としたオフセットとして表されます。The position is expressed as an offset relative to the beginning of the stream.

データを追加するためにファイルを開く場合、現在のファイルの位置は、次の書き込みが発生する場所ではなく最後の I/O 操作によって決まります。Note that when a file is opened for appending data, the current file position is determined by the last I/O operation, not by where the next write would occur. たとえば、追加のためにファイルが開かれ、最後の操作が読み取りだった場合、ファイルの位置は、次の書き込みが開始される位置ではなく、次の読み取り操作が開始される位置になりますFor example, if a file is opened for an append and the last operation was a read, the file position is the point where the next read operation would start, not where the next write would start. (追加のためにファイルが開かれるときには、ファイルの位置は書き込み操作が開始される前にファイルの末尾に移動されます)。追加のために開かれたファイルで I/O 操作がまだ発生していない場合、ファイルの位置はファイルの先頭です。(When a file is opened for appending, the file position is moved to end of file before any write operation.) If no I/O operation has yet occurred on a file opened for appending, the file position is the beginning of the file.

テキスト モードでは、Ctrl + Z は入力時に EOF (end-of-file) 文字として解釈されます。In text mode, CTRL+Z is interpreted as an end-of-file character on input. 読み取り/書き込み用に開かれたファイルでは、 fopenと関連するすべてのルーチンで、ファイルの末尾に CTRL + Z があるかどうかを確認し、可能であれば削除します。In files opened for reading/writing, fopen and all related routines check for a CTRL+Z at the end of the file and remove it if possible. この処理が行われる理由は、 ftellfseekまたは _ftelli64_fseeki64の組み合わせを使用して、CTRL + Z で終わるファイル内を移動すると、の末尾付近でftellまたは _ftelli64が正しく動作しなくなる可能性があるためです。拡張子.This is done because using the combination of ftell and fseek or _ftelli64 and _fseeki64, to move within a file that ends with a CTRL+Z may cause ftell or _ftelli64 to behave improperly near the end of the file.

この関数は実行中に呼び出し元スレッドをロックするため、スレッド セーフです。This function locks the calling thread during execution and is therefore thread-safe. 非ロックバージョンについては、「 _ftell_nolock」を参照してください。For a non-locking version, see _ftell_nolock.


関数Function 必須ヘッダーRequired header 省略可能なヘッダーOptional headers
ftellftell <stdio.h><stdio.h> <errno.h><errno.h>
_ftelli64_ftelli64 <stdio.h><stdio.h> <errno.h><errno.h>

互換性の詳細については、「 互換性」を参照してください。For additional compatibility information, see Compatibility.


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

関連項目See also

ストリーム入出力Stream I/O
fopen、_wfopenfopen, _wfopen
fseek、_fseeki64fseek, _fseeki64
_lseek、_lseeki64_lseek, _lseeki64