如何在Windows上使用C ++编程恢复电源故障数据

时间:2010-04-16 11:18:32

标签: c++ windows

在我的程序中,我正在写一个程序状态的文件。 我在程序运行期间多次将文件写入文件,因为程序会更改一些我需要经常存储的变量。

现在,如果由于某些原因我的电源失效了。 然后大部分时间我都在该文件中丢失数据。

请告诉我任何即使断电也能保护数据的机制。 (我在Windows上编写了C ++程序。)

谢谢

5 个答案:

答案 0 :(得分:2)

使用事务数据库,例如SQL Server。定期将更改提交到数据库。当数据库服务器断电时,您的数据不太可能被破坏,但是为了以防定期进行备份是明智的。

答案 1 :(得分:0)

尽可能经常

Flush该文件,或获取UPS;)

答案 2 :(得分:0)

根据建议,您可以使用事务数据库来跟踪状态。如果出于各种原因,您希望坚持使用普通文件:

我建议使用基于事务的数据文件,该文件始终附加到您不断重写的数据文件中。换句话说,当您第一次创建文件时,将完整数据集写为起始状态。然后,对于程序写入的每个更改,保留现有文件并仅附加更改(例如,记录变量B更改为42)而不是重写整个文件。当文件达到一定大小时,您将关闭它,以当前完整状态启动一个新文件,然后重复。

恢复会稍微复杂一些,因为你必须恢复整个状态文件,但如果有任何数据(经常刷新),你不应该损失很多。

答案 3 :(得分:0)

如果您当前每次安装使用一个平面文件,那么

SQLite是一个不错的选择。它是一个公共域单文件数据库,设计为ACID-compliant,包括数据写入期间电源故障的恢复能力。它有多种C++ APIs

答案 4 :(得分:0)

您需要使用FlushFileBuffers(win32 API)或POSIX fsync(对于POSIX OS)来确保将数据物理写入磁盘。一旦调用它,您可能确定数据是持久的。这就像ACID的穷人D。

但请注意,此功能非常慢......请小心使用。