既に開かれているファイルのポインターを移動します。
virtual ULONGLONG Seek(
LONGLONG lOff,
UINT nFrom
);
パラメーター
lOff
ポインターを移動するバイト数。nFrom
ポインターの移動モード。 次のいずれかの値を指定します。CFile::begin:ファイル ポインターを移動lOffバイト転送ファイルの先頭から。
CFile::current:ファイル ポインターを移動lOffファイル内の現在の位置からのバイト。
CFile::end:ファイル ポインターを移動lOffファイルの末尾からのバイト。 既存ファイル内でポインターを移動するときは、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