[英]How to restore data on Power Failure using C++ programming on windows
在我的程序中,我正在寫一個程序狀態的文件。 我在程序運行期間多次將文件寫入文件,因為程序會更改一些我需要經常存儲的變量。
現在,如果由於某些原因我的力量失敗了。 然后大多數時候我在該文件中丟失數據。
請告訴我任何即使斷電也能保護數據的機制。 (我在Windows上編寫了C ++程序)。
謝謝
使用事務數據庫,如SQL Server。 定期將更改提交到數據庫。 當數據庫服務器斷電時,您的數據不太可能被破壞,但為了以防萬一,定期進行備份是明智的。
如建議的那樣,您可以使用事務數據庫來跟蹤狀態。 如果出於各種原因,您希望堅持使用普通文件:
我建議使用一個總是附加到事務的數據文件,而不是一個你不斷重寫的文件。 換句話說,當您第一次創建文件時,將完整數據集寫為起始狀態。 然后,對於程序寫入的每個更改,保留現有文件並僅附加更改(例如,記錄變量B更改為42)而不是重寫整個文件。 當文件達到一定大小時,您將關閉它,以當前完整狀態啟動一個新文件,然后重復。
恢復將稍微復雜一點,因為您必須恢復整個狀態文件,但如果有任何數據(經常刷新),您不應該損失太多。
您需要使用FlushFileBuffers(win32 API)或POSIX fsync(用於POSIX OS)來確保將數據物理寫入磁盤。 一旦調用它,您可能確定數據是持久的。 這就像ACID的窮人D。
但請注意,此功能非常慢......請小心使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.