簡體   English   中英

為什么ofstream需要刷新?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM