如何保护文件免受电源故障(Win7)

时间:2014-08-15 09:12:47

标签: vb.net windows-7 filesystems disk

我的VB.NET应用程序使用config.xml文件来存储所有配置。该文件经常被写入(每20秒左右),因为它还存储用户会话的状态等。用户不时地报告该文件突然为零长度或充满未知字符,因此应用程序是不可执行。

我跟踪问题,发现在电源故障或甚至正常关机(!)之前写入文件时会发生这种情况。我用记事本测试了它 - 我在编辑后立即编辑了文件并拔掉了电源线,然后在重新启动后,文件被破坏了。启动系统关闭后文件通常为空,或者断电后文件为零(按位)。所以这看起来不像我的应用程序的问题,而是一般的操作系统或磁盘/ FS问题。

这种情况发生在十多种不同的PC上。所有都有Win7,NTFS,有些有SSD磁盘,有些没有。

这可以预防吗?我可以确保该文件包含编辑前的数据或编辑后的数据,但永远不会以损坏的状态结束吗?

1 个答案:

答案 0 :(得分:0)

您无法阻止用户拔掉电源线,系统将无法关机。

我相信,您可以通过存储多个(至少两个)文件来处理它,如果最后一个文件已损坏,请使用前一个文件。

编辑:这意味着,当计时器滴答时,不应保存相同的文件。因为您没有提供详细信息,所以我无法建议更改代码。您可以定义一个布尔变量,您可以在计时器滴答时取消,然后切换保存的文件:

blnUseSecondaryFile = Not blnUseSecondaryFile
If blnSecondaryFile Then
   savepath = "file2.xml"
Else
   savepath = "file1.xml"
End If