簡體   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