【问题标题】:How to protect files from power failure (Win7)如何保护文件免受电源故障(Win7)
【发布时间】:2014-10-09 01:03:49
【问题描述】:

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

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

这发生在十多台不同的 PC 上。都有Win7,NTFS,有的有SSD盘,有的没有。

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

【问题讨论】:

  • 不要覆盖现有文件。创建一个新文件并使用 File.Replace()。

标签: vb.net windows-7 filesystems disk


【解决方案1】:

您无法防止,用户会拔掉电源线,系统会意外关机。

我相信,您可以通过存储多个(至少两个)文件来解决此问题,如果最后一个文件损坏,请使用前一个文件。

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

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

【讨论】:

  • 这基本上是我现在正在做的,但我认为这是一种解决方法,而不是干净的解决方案。
  • 我知道我无法防止电源故障,但我想知道我是否可以防止文件损坏。例如,Windows 系统文件呢?我相信 windows 必须以某种方式保护它们免受此类错误的影响,否则您的系统会不时损坏。
  • 如果没有其他方法来保护文件,这不是一个糟糕的解决方案。我仍然担心,如果两个写入在短时间内发生,两个文件都可能会损坏。
  • Windows 正在使用卷影副本来保存系统文件的备份。同样来自 Windows Vista 的 WinSxS 文件夹包含所有版本的二进制文件。这些仅硬链接到 system32 文件夹。 Microsoft Office 每隔 X 秒保存一次文档副本,如果意外退出,它允许您恢复它并选择版本。据我所知,这种情况没有更好的解决方案。也许其他文件系统(ext3、Reiser)处理得更好,但我不知道。
猜你喜欢
  • 1970-01-01
  • 2016-04-20
  • 1970-01-01
  • 2015-11-19
  • 2014-05-17
  • 2011-07-02
  • 2011-02-16
  • 2021-09-23
  • 2011-06-26
相关资源
最近更新 更多