【发布时间】:2015-10-18 14:38:27
【问题描述】:
我写了一个模拟程序。在每个时间步中,它将一个输出块写入文件。它仍在开发中,因此有时会崩溃或被用户终止。在这种情况下,为了调试和分析,我仍然希望我的文件处于正确状态,包含已写入的数据。
目前,我执行以下操作:
程序启动后,我打开文件不附加并立即关闭它,只是为了清空文件:
file.open(fname, std::ios::binary);
file.close();
在每个时间步,我首先打开附加文件,写入数据,然后关闭文件:
file.open(fname, std::ios::binary | std::ios::app);
... // data is written here
file.close();
这是解决问题的好方法还是您推荐其他方法?
【问题讨论】:
-
你的代码已经保存了文件和你已经写入的数据。
-
如果程序崩溃了,为什么不使用异常处理让文件在程序终止之前关闭?
-
有趣又难的问题。当应用程序崩溃时,操作系统将关闭文件。手动关闭它可能没有什么区别。首先,您的操作系统是什么?
-
@ZachiShtain:如果程序崩溃,那么就没有更多的异常处理了。而如果异常处理发生在崩溃之前,那么
std::ofstream的析构函数会确保文件被关闭。 -
用
app和close代替open- 为什么不简单地使用flush代替?