如果我运行以下代码,则根本不会创建任何文件:
std::ofstream outputFile(strOutputLocation.c_str(),std::ios::binary); outputFile.write((const char*)lpResLock,dwSizeRes); outputFile.close();
std::ofstream outputFile(strOutputLocation.c_str(),dwSizeRes); outputFile.flush(); outputFile.close();
标准库是否真的需要这个,或者它是Visual C CRT中的错误?
解决方法
这是一个错误.阅读§27.8.1.10/ 4,删节:
void close();
Effects: Callsrdbuf()->close()
…
rdbuf() – > close()有什么作用?根据§27.8.1.3/ 6,删节,强调我的:
basic_filebuf<charT,traits>* close();
Ifis_open() == false
,returns a null pointer. If a put area exists,callsoverflow(EOF)
to flush characters. …
也就是说,它假设要冲洗. (实际上,对flush()的调用最终会做同样的事情.)