2015-10-18 58 views
1

我写了一个模拟程序。在每个时间步中,它将一个输出块写入文件。它仍在开发中,因此它有时会崩溃或被用户终止。在那种情况下,为了调试和分析,我仍然希望我的文件处于正确的状态,包含已写入的数据。如何为长时间运行的程序做文件输出

目前,我做到以下几点:

在节目的开始,我打开该文件不追加并关闭它了,只是为了清空文件:

file.open(fname, std::ios::binary); 
file.close(); 

在每个时间步,我首先打开文件追加,写入数据,然后关闭文件:

file.open(fname, std::ios::binary | std::ios::app); 
... // data is written here 
file.close(); 

这是解决问题的好方法,还是您推荐一种不同的方法?

+0

您的代码已经将文件与您已经写入的数据保存在一起。 –

+0

如果程序崩溃,为什么不使用异常处理,以便在程序终止之前关闭文件? –

+0

有趣和困难的问题。操作系统将在应用程序崩溃时关闭该文件。手动关闭它可能没有什么区别。对于初学者来说,你的操作系统是什么? –

回答

-1

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

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

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

相关问题