2014-01-15 49 views
2

在Windows Phone上使用獨立存儲的新手段。Windows手機隔離存儲可防止退出時文件損壞

我想在我的Windows Phone應用程序中使用獨立存儲在xml文件中保存一些信息。我只是想知道,如果用戶或應用程序存在,而我正在寫入XML文件,我可能會結束了一些數據損壞?是這樣嗎?如果是這樣,我該如何防範呢?

回答

1

幾乎所有類型的文件在大多數文件系統/操作系統上的寫入操作期間都可能損壞 - 最糟糕的情況是,您有一個大型文件需要幾秒鐘的時間才能寫入磁盤,並且電池在保存它。所以我的答案並不特定於Windows Phone。

一個常見的解決方法是創建一個臨時文件,然後替換/重命名它。重命名文件是一個原子操作,意味着它要麼發生,要麼不發生 - 兩者之間沒有任何關係。

所以下面的僞代碼將是安全的:

SaveFile(filename)) 
    SaveNewFile(stream, filename + ".new.tmp") 
    TryDeleteFile(filename + ".old.tmp") 
    RenameFile(filename, filename + ".old.tmp") 
    RenameFile(filename + ".new.tmp", filename) 
    DeleteFile(filename + ".old.tmp") 

LoadFile(filename) 
    TryRenameFile(filename + ".old.tmp", filename) 
    OpenFile(filename) 

這是簡單的,如果替換操作可用:

SaveFile(filename) 
    SaveNewFile(stream, filename + ".new.tmp") 
    ReplaceFile(filename, filename + ".new.tmp") 

LoadFile(filename) 
    OpenFile(filename) 

它得到棘手,如果多個進程訪問同一個文件,因爲那樣的話你需要鎖定文件以覆蓋邊緣情況。一個簡單得多的,以避免腐敗的方法是使用一個數據庫,如下所示:

http://msdn.microsoft.com/en-US/library/windowsphone/develop/hh202860(v=vs.105).aspx

數據庫不迴避這個問題,他們解決它。他們仍然在幕後使用文件,並且包含所有邏輯以執行類似於上述僞代碼的操作,包括鎖定方案以避免所有邊緣情況。