如果我运行以下代码,则根本不会创建任何文件:

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中的错误?

最佳答案

这是一个错误。阅读§27.8.1.10/4,节录:


rdbuf()->close()是做什么的?根据§27.8.1.3/6,节略的是我的:



也就是说,应该进行冲洗。 (实际上,对flush()的调用最终会做同样的事情。)

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

10-06 12:07