ftell、_ftelli64

更新 : 2007 年 11 月

ファイル ポインタの現在位置を取得します。

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

パラメータ

  • stream
    対象の FILE 構造体。

戻り値

ftell および _ftelli64 は、現在のファイル位置を返します。テキスト モードで開いたストリームでは、復帰と改行の変換が行われるため、ftell および _ftelli64 の戻り値は物理的なバイト オフセットを表さない場合があります。正しいファイルの位置を返すには、ftell と一緒に fseek を使用するか、_ftelli64 と一緒に _fseeki64 を使用してください。エラーが発生した場合、「パラメータの検証」に説明されているように、ftell および _ftelli64 は無効なパラメータ ハンドラを呼び出します。実行の継続が許可された場合、これらの関数は –1L を返し、errno を、ERRNO.H に定義された 2 つの定数のいずれかに設定します。EBADF 定数は、stream 引数が有効なファイル ポインタではないか、開かれているファイルを参照しないことを意味します。EINVAL 定数は、無効な stream 引数が関数に渡されたことを意味します。端末やプリンタなど、シークできないデバイスの場合、または stream が開いているファイルを参照しない場合、戻り値は未定義です。

戻り値の詳細については、「_doserrno、errno、_sys_errlist、および _sys_nerr」を参照してください。

解説

ftell 関数および _ftelli64 関数は、stream に関連付けられたファイル ポインタがある場合に、ポインタの現在位置を取得します。現在位置は、ストリームの先頭からのオフセットで表されます。

ファイルを追加モードで開くと、現在のファイル位置は次の書き込みが行われる場所ではなく、前の I/O 操作が行われた場所になります。たとえば、ファイルを追加モードで開き、前の操作が読み出しだった場合、ファイル位置は次の書き込み開始位置ではなく、次の読み出し開始位置になります。ファイルを追加モードで開いた場合、書き込み操作が行われる前に、ファイル位置はファイルの終端に移動します。追加モードで開いたファイルで I/O 操作がまだ行われていない場合、ファイル位置はファイルの先頭になります。

テキスト モードでは、Ctrl + Z は入力時に EOF (EOF: end-of-file) 文字として解釈されます。読み出しおよび書き込み両用のモードで開かれたファイルでは、fopen および関連ルーチンがすべてファイル末尾の Ctrl + Z の有無を調べ、削除できる場合は削除します。この処理が行われる理由は、Ctrl + Z で終わるファイル内を ftell と fseek の組み合わせまたは _ftelli64 と _fseeki64 の組み合わせで移動すると、ファイルの終端付近で ftell または _ftelli64 が正しく動作しないことがあるためです。

この関数は実行中に呼び出し元スレッドをロックするため、スレッド セーフになります。ロックされないバージョンについては、「_ftell_nolock」を参照してください。

必要条件

関数

必須ヘッダー

省略可能なヘッダー

ftell

<stdio.h>

<errno.h>

_ftelli64

<stdio.h>

<errno.h>

互換性の詳細については、「C ランタイム ライブラリ」の「互換性」を参照してください。

使用例

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

.NET Framework の相当するアイテム

System::IO::FileStream::Position

参照

参照

ストリーム入出力

fopen、_wfopen

fgetpos

fseek、_fseeki64

_lseek、_lseeki64