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,返回一个空指针。如果存在放置区域,则调用overflow(EOF)刷新字符。...

也就是说,它应该是冲洗。(事实上​​,调用flush()最终做同样的事情。)


close()请注意,不需要调用自身,因为basic_ofstream将调用的析构函数close()

于 2011-02-18T02:10:21.470 回答
0

您是否在退出程序之前检查文件?操作系统将缓冲所有 IO,因此在您退出之前可能看不到文件中的任何数据(除非您刷新)。

于 2011-02-18T02:01:41.620 回答