用C#撰寫的程式,正常對XML檔案進行操作。如果電腦例外掉電,再重啟之后XML文本被破壞。里面內容完全丟失。有沒有人遇到過這種情況。有沒有解決的辦法
uj5u.com熱心網友回復:
沒保存?字數字數uj5u.com熱心網友回復:
正常讀取,正常保存。但是如果是電腦掉電了,開起來XML內容就全部丟失了uj5u.com熱心網友回復:
操作中未保存的內容丟失很正常,之前已經保存了的應該不會丟
uj5u.com熱心網友回復:
看你寫入的方式,Filestream有幾個多載,其中一種就是打開時先把file清成0位元組,如果是這種不光斷電是如此,如果你寫入例外也如此(寫入例外實際就是沒寫入,但是打開時候已經清零了)所以通常為了保險是先寫臨時檔案,成功后在改原始檔案的后綴為 原始檔案名.xml.bak,最后修改新的臨時檔案為原始檔案名(這樣操作就算例外也頂多是寫入不成功,繼續使用原始檔案而已)
uj5u.com熱心網友回復:
這種情況,肯定需要定期回寫磁盤的機制相當于程式啟動后,把xml內容從檔案中讀取到Cache中,
其他的呼叫不直接與xml互動,而是與cache互動,
后臺使用單獨執行緒,周期性或者事件觸發的形式保存檔案。
uj5u.com熱心網友回復:
斷電這種沒辦法,你可以考慮操作前先復制備份一份,如果打開xml例外,則從備份恢復uj5u.com熱心網友回復:
正常應該是打開你的軟體 讀取檔案. 這個可能根本不費時 因為xml你不可能那么大.然后這個期間 所有的資料 都保存在了記憶體中.. 然后等你操作完成后執行保存操作,.
那么怎么可能有那么巧合的事?
我覺得不太可能吧,
你想下 你執行save的時候 才會清空xml或者重新生成一個 然后替換 怎么可能這個并發的時候 斷電?
執行保存我雖然沒有具體測驗過,不過瞬間就可以完成吧.
反正我覺得這幾率是微乎及微.....我覺得還是你代碼別的地方有問題....
uj5u.com熱心網友回復:
我是用xmldocument 載入檔案,進行讀取操作后,save 檔案。然后程式掛著沒任何操作,把電源拔了,一兩次必會出現丟失資料的情況。當然前面的步驟在不掉電的情況,操作無數次都不會有問題。uj5u.com熱心網友回復:
找個檔案恢復軟體恢復下,有可能恢復uj5u.com熱心網友回復:
復制,操作,保存,替換uj5u.com熱心網友回復:
雖然還是沒找到問題的原因,不過你這種方法確實可行。uj5u.com熱心網友回復:
參考錯樓了,應該是這個答案uj5u.com熱心網友回復:
遇到相似情況,最后解決方案:減少頻繁讀寫xml檔案可以試試
把xml檔案讀到FileStream中
使用XDocument Load(Stream stream)來加載xml檔案,操作xml檔案
記得要Close();
uj5u.com熱心網友回復:
寫入完成釋放掉。另外可以寫的時候先生成臨時檔案,然后把之前的洗掉,臨時檔案重命名轉載請註明出處,本文鏈接:https://www.uj5u.com/net/246356.html
標籤:C#
上一篇:求助綠色版的安裝檔案,如何適配不同系統的.NET呢?
下一篇:請教格式化字串的問題
