备份configuration文件

我需要能够将configuration文件存储在断开电源的机器上;),我使用基本的WinApi来存储configuration数据(WriteFile),这是有效的,除非机器被closures;),有时文件isn根本没有保存。

我正在考虑2个解决scheme:

1)事务性NTFS API(例如CreateFileTransacted() ),但这个东西只适用于Vista和NTFS必须存在,我不能在大多数情况下使用它

2)要在%APPDATA%目录下创buildconfiguration文件的备份副本,说20个备份副本,并在检测到损坏的configuration文件时在应用程序启动时恢复它们

如果您知道其他解决scheme(主要问题是closures机器,请将其closures),请告诉我。 谢谢。

你并不需要20个备份副本。 你只需要1 – 最后一个副本。 现在,如果你的客户真的要求配置文件的基本版本控制系统是另一回事。 但是只要有一个好的配置文件,你只需要1个备份。

现在,这是我以前为嵌入式项目所做的工作:

  1. 计算配置文件的散列并将其存储在文件中。 最简单的方法是将它作为注释附加到文件末尾。 我曾经为此使用crc32,但现在我会使用SHA1。 这甚至可以在传输/存储配置文件之前通过配置上传工具自动完成。

  2. 当打开配置文件时,提取散列并将其与从文件中计算出的值进行比较(显然是从文件中删除散列后计算的)。 如果散列不存在,则文件不完整。 如果散列不相同,则文件已损坏。 无论哪种情况,都要使用旧文件。

  3. 现在,一个有效的&正确的配置文件被验证,它可以取代旧的配置文件。 使用操作系统的重命名操作。 它通常在大多数现代文件系统上是原子的,所以失败的重命名不会破坏旧文件。

这是我多年来使用的最稳健的系统。 这基本上是什么bittorrent做的。