【问题标题】:How to do file output for a long-running program如何为长时间运行的程序进行文件输出
【发布时间】: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的析构函数会确保文件被关闭。
  • appclose 代替open - 为什么不简单地使用flush 代替?

标签: c++ file-io


【解决方案1】:

不,这种方法会浪费很多时间。

您是否尝试过编写信号处理程序来正确清理?您可以处理大多数事情,例如用户按下 Control-C 并在退出前关闭文件。

另一个想法是关闭缓冲。执行此操作的最简单方法可能是将 STDERR 重定向到您的文件,因为默认情况下它是无缓冲的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-20
    • 1970-01-01
    • 1970-01-01
    • 2015-08-20
    • 2016-08-20
    • 2023-04-08
    • 1970-01-01
    相关资源
    最近更新 更多