0

MFC CFile Seek 関数を使用しています。ファイルの長さを超えるシークについて問題があります。

CFile cfile;
BOOL bResult = cfile.Open(
L"C:\\2.TXT", 
CFile::modeReadWrite | 
CFile::modeCreate | 
CFile::modeNoTruncate | 
CFile::typeBinary | 
CFile::shareDenyNone);

cfile.Seek(10000, CFile::End);
cfile.Close();

MSDN: 備考

Seek 関数は、ポインタを絶対的または相対的に指定した量だけ移動することにより、ファイルの内容へのランダム アクセスを許可します。シーク中に実際に読み取られるデータはありません。要求された位置がファイルのサイズよりも大きい場合、ファイルの長さはその位置まで拡張され、例外はスローされません。

MSDN によると、ファイルの長さは拡張されます。ただし、 の後cfile.Close()、ファイルは同じままです。なぜですか?どうもありがとうございました!

4

1 に答える 1

1

MSDN はこの問題を少し誤解していると思います。Seek を呼び出すと、ファイル ポインターは調整されますが、ディスク上の実際のファイルはまだ変更されません。その後に Write を呼び出すと、実際のファイルはスパース ファイル (NTFS の場合) またはより長いファイル (FAT の場合) になり、予想される長さになります。

明確なルールはないようです。

于 2009-09-15T03:47:50.850 に答える