8

次のコードを実行すると、ファイルはまったく作成されません。

std::ofstream outputFile(strOutputLocation.c_str(), std::ios::binary);
outputFile.write((const char*)lpResLock, dwSizeRes);
outputFile.close();

ただし、閉じる前に flush() を追加すると、機能します。

std::ofstream outputFile(strOutputLocation.c_str(), std::ios::binary);
outputFile.write((const char*)lpResLock, dwSizeRes);
outputFile.flush();
outputFile.close();

標準ライブラリは実際にこれを必要としますか?それとも Visual C++ CRT のバグですか?

4

2 に答える 2

8

バグです。§27.8.1.10/4 を読んで、要約:

void close();
効果: 呼び出しrdbuf()->close()...

何をしrdbuf()->close()ますか?§27.8.1.3/6 によると、要約、強調鉱山:

basic_filebuf<charT,traits>* close();
の場合is_open() == false、null ポインターを返します。put 領域が存在する場合は、overflow(EOF)文字をフラッシュするために呼び出します。...

つまり、フラッシュすることになっています。(実際、呼び出しはflush()最終的に同じことを行います。)


will のデストラクタがを呼び出すclose()ため、それ自体への呼び出しは必要ないことに注意してください。basic_ofstreamclose()

于 2011-02-18T02:10:21.470 に答える
0

プログラムを終了する前にファイルをチェックしていますか? OS はすべての IO をバッファリングするため、終了する前に (フラッシュしない限り) ファイル内のデータが表示されない場合があります。

于 2011-02-18T02:01:41.620 に答える