如何在异常关机时避免文件损坏?

时间:2018-02-20 02:12:51

标签: windows

我发布此问题是因为没有找到确切的答案。

问题:在我正在使用的其中一个应用程序中,我们需要考虑编码中的停电/异常停机。应用程序在运行时修改/创建一些文件(让我们假设一个简单的.txt文件)。

观察到当应用程序运行时发生电源故障时,所有创建/修改的文件都已损坏。确切地说,我们可以看到文件的元数据,但是如果我们打开文件,所有内容都将消失,文件为空。当我们在Notepad ++中打开文件时,文件将填充NULL。

由于一些操作系统优化机制,所有文件内容都会被写入磁盘,即使从技术上讲我们之前完成了写操作。

技术细节:该应用程序位于c ++上。我们使用普通的CStdioFile调用进行FILE IO操作。

问题:是否有任何编码方法可以避免这些文件损坏?

2 个答案:

答案 0 :(得分:1)

唯一的应用程序级解决方案(没有进入聪明的文件系统等)是保留旧的"未更改的副本#34;文件,以便您可以恢复到" safe"状态。

如果有人在写入中间插入插件,那么您写入的文件几乎肯定是腐败的,但如果您正在处理副本并且仍然拥有原件,那么您可以忘记损坏的副本和"后退"原来的。

答案 1 :(得分:1)

是的,有。

将新版本写入目标文件夹中的另一个文件。我通常使用this method将扩展名替换为“.tmp”,但在现代C ++中,还有一种内置的跨平台方式,replace_extension

完成后,刷新并关闭文件。这将导致操作系统将更改写入HDD。然后用例如带有MOVEFILE_REPLACE_EXISTING标志的MoveFileEx用新写入的临时文件替换目标文件。替换操作是almost always原子。

相关问题