在Windows Phone上使用獨立存儲的新手段。Windows手機隔離存儲可防止退出時文件損壞
我想在我的Windows Phone應用程序中使用獨立存儲在xml文件中保存一些信息。我只是想知道,如果用戶或應用程序存在,而我正在寫入XML文件,我可能會結束了一些數據損壞?是這樣嗎?如果是這樣,我該如何防範呢?
在Windows Phone上使用獨立存儲的新手段。Windows手機隔離存儲可防止退出時文件損壞
我想在我的Windows Phone應用程序中使用獨立存儲在xml文件中保存一些信息。我只是想知道,如果用戶或應用程序存在,而我正在寫入XML文件,我可能會結束了一些數據損壞?是這樣嗎?如果是這樣,我該如何防範呢?
幾乎所有類型的文件在大多數文件系統/操作系統上的寫入操作期間都可能損壞 - 最糟糕的情況是,您有一個大型文件需要幾秒鐘的時間才能寫入磁盤,並且電池在保存它。所以我的答案並不特定於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
數據庫不迴避這個問題,他們解決它。他們仍然在幕後使用文件,並且包含所有邏輯以執行類似於上述僞代碼的操作,包括鎖定方案以避免所有邊緣情況。