繁体   English   中英

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

[英]How to restore data on Power Failure using C++ programming on windows

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

现在,如果由于某些原因我的力量失败了。 然后大多数时候我在该文件中丢失数据。

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

谢谢

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

尽可能频繁地刷新文件,或者获得UPS ;)

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

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

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

如果您当前每个安装使用一个平面文件, SQLite是一个不错的选择。 它是一个公共域单文件数据库,旨在符合ACID标准 ,包括数据写入期间电源故障的恢复能力。 它有各种各样的C ++ API

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM