我有一個應用程序,它使用XElement對象的.Save(「path」)方法每隔500毫秒將數據存儲在XML文件中。 問題是:當發生突然關機時,文件的內容被刪除,因此在下次運行應用程序時文件無法使用。當突然關機發生時,XML文件數據丟失
如何防止/確保數據不會丟失?我在Windows 7上使用.NET 2010 C#
我做了一個實驗:而不是寫入我創建的同一個data.xml文件(通過從原始文件複製)一個新文件每次當從data.xml文件複製時電源關閉時,它會破壞以前創建的所有文件?!?!?
我有一個應用程序,它使用XElement對象的.Save(「path」)方法每隔500毫秒將數據存儲在XML文件中。 問題是:當發生突然關機時,文件的內容被刪除,因此在下次運行應用程序時文件無法使用。當突然關機發生時,XML文件數據丟失
如何防止/確保數據不會丟失?我在Windows 7上使用.NET 2010 C#
我做了一個實驗:而不是寫入我創建的同一個data.xml文件(通過從原始文件複製)一個新文件每次當從data.xml文件複製時電源關閉時,它會破壞以前創建的所有文件?!?!?
我們假設你的文件是data.xml
。不是一直寫入data.xml
,而是寫入臨時文件data.xml.tmp
,完成後將其重命名爲data.xml
。但如果您已有data.xml
文件,重命名將不起作用,因此您需要先刪除它,然後重命名該臨時文件。
那樣,data.xml
將包含最後的安全數據。如果突然關機,則不完整的文件將是臨時的data.xml.tmp
。如果您的程序稍後嘗試讀取該文件,並且沒有data.xml
文件,則意味着在刪除和重命名操作之間發生了關閉,因此您必須改爲讀取臨時文件。我們知道這是安全的,否則會有一個data.xml
文件。
您需要擁有業務事務的概念,以便在關閉的情況下從上一個良好的檢查點開始該流程。你需要改變你的問題以包含更多細節。通常,文件系統不是事務性的。 – 2013-04-22 20:34:53
在突然關機的地方,您正在處理哪種基礎設施?你的意思是像權力的喪失?你沒有備用電池嗎? – tnw 2013-04-22 20:36:26
坦克的答案/評論 - 我沒有備用電池,這是一個罕見的情況,必須得到治療。 – Yossi 2013-04-23 20:34:01