[英]Why does ofstream require a flush?
如果我運行以下代碼,則根本不會創建任何文件:
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,刪節:
void close();
效果:調用rdbuf()->close()
...
rdbuf()->close()
做什么? 根據§27.8.1.3/ 6,刪節,強調我的:
basic_filebuf<charT,traits>* close();
如果is_open() == false
,則返回空指針。 如果存在put區域,則調用overflow(EOF)
以刷新字符。 ...
也就是說,它假設要沖洗。 (實際上,對flush()
的調用最終會做同樣的事情。)
注意,不需要調用close()
本身,因為basic_ofstream
的析構basic_ofstream
將調用close()
。
您是否在退出程序之前檢查文件? 操作系統將緩沖所有IO,因此在退出之前可能看不到文件中的任何數據(除非您刷新)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.