ftell、_ftelli64
ファイル ポインターの現在の位置を取得します。
long ftell(
FILE *stream
);
__int64 _ftelli64(
FILE *stream
);
パラメーター
- stream
ターゲット FILE 構造体。
戻り値
ftell と _ftelli64 はファイルの現在の位置を返します。 ftell と _ftelli64 によって返される値は、テキスト モードでキャリッジ return–linefeed 変換が発生するため、テキスト モードで開かれたストリームの物理的なバイト オフセットを表していないことがあります。 ファイルの場所に適切に戻るために fseekのftell または_fseeki64 の_ftelli64を使用します。 エラーの場合、ftellと_ftelli64 は パラメーターの検証"に説明されているように、無効なパラメーター ハンドラーを呼び出します。 実行の継続が許可された場合、これらの関数は–1L と 2 桁の定数の 1 つがに設定 errno、ERRNO.H.で定義されています。 EBADF の定数は stream の引数に有効なファイル ポインター値ではなく、開いているファイルを参照しないことを意味します。 EINVAL は stream の無効な引数が関数に渡されたことを意味します。 到達できないのデバイスで stream が開いているファイルがない場合 (ターミナルとプリンターなど)、または、戻り値は未定義です。
リターン コードの詳細については、「_doserrno、errno、_sys_errlist、および _sys_nerr」を参照してください。
解説
ftell と _ftelli64関数は streamに関連付けられたファイル ポインターの現在の位置 (ある場合) を取得します*。*位置は、ストリームの先頭を基準としたオフセットとして表現されます。
次の発生した場所によって作成またはファイルのデータを付けるために開いたときは、ファイルの現在の位置は最後の I/O 操作によって決定されることで、注意してください。 たとえば、ファイルを追加するためにその直前の操作を読み取り、ファイル位置は、次の場所に書き込み、次の読み取り操作を開始するポイントであり、開始します。ファイルを追加するために開く場合、ファイル位置は、書き込み操作の前に、ファイルの終端に移動されます)。I/O 操作を付けるように開かれたファイルに行われていないファイル位置はファイルの先頭です。
テキスト モードでは、Ctrl + Z は入力のファイルの終端の文字として解釈されます。 ファイルの末尾に/書き込み用に読み取ること、Ctrl + Z の fopen および関連するすべてのチェックは、開くファイルでは、可能な場合は削除します。 これは ftell の組み合わせと fseek または _ftelli64_fseeki64と使用すると、CTRL+Z で終わるファイル内で移動するには、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 );
}
}
同等の .NET Framework 関数
System::IO::FileStream::Position