CStdioFile::Seek
更新 : 2007 年 11 月
既に開かれているファイルのポインタを移動します。
virtual ULONGLONG Seek(
LONGLONG lOff,
UINT nFrom
);
パラメータ
lOff
ポインタを移動するバイト数。nFrom
ポインタの移動モード。次のいずれかの値を指定します。CFile::begin: ファイルの先頭から lOff バイト先にファイル ポインタを移動します。
CFile::current: ファイル ポインタをファイルの現在位置から lOff バイト移動します。
CFile::end: ファイル ポインタをファイルの末尾から lOff バイト移動します。既存ファイル内でポインタを移動するときは負の値を設定します。正の値を設定すると、ポインタがファイルの末尾を越えて先に移動してしまいます。
戻り値
要求した位置が正しい場合は、Seek 関数は、ファイルの先頭からの新しいバイト オフセットを返します。それ以外の場合は戻り値は未定義のまま、CFileException オブジェクトがスローされます。
解説
Seek 関数を使用すると、相対的または絶対的に指定した量だけポインタを移動することによって、ファイルの内容にランダムにアクセスできます。シーク中は、データは実際には読み取られません。要求した位置がファイル サイズより大きい場合、その位置までファイルの長さが拡張され、例外はスローされません。
ファイルが開かれたとき、ファイル ポインタはオフセット 0 に設定されます。これが、ファイルの先頭を表します。
Seek のこの実装は、ランタイム ライブラリ (CRT) 関数 fseek を基にしています。テキスト モードで開かれているストリームに対して Seek を使用する場合にはいくつかの制限が発生します。詳細については、「fseek、_fseeki64」を参照してください。
使用例
cfile ファイルの先頭からポインタを 1,000 バイト移動する場合の Seek の使用例を次に示します。Seek はデータを読み込まないので、この関数の後に CStdioFile::ReadString を呼び出してデータを読み込む必要があります。
CStdioFile cfile(_T("Stdio_Seek_File.dat"), CFile::modeWrite |
CFile::modeCreate);
LONGLONG lOff = 1000;
ULONGLONG lActual = cfile.Seek(lOff, CFile::begin);
必要条件
ヘッダー : afx.h