如果我运行以下代码,则根本不会创建任何文件:
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()
。