2014-01-15 3 views
2

Новое использование изолированного хранилища на телефоне Windows.Windows Phone изолированное хранилище предотвращает повреждение файла при выходе

Я хочу сохранить некоторую информацию в XML-файле, используя изолированное хранилище в приложении для Windows-телефона. Мне просто интересно, если пользователь или приложение существует, когда я пишу в 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

Базы данных не избежать этой проблемы, они решают его. Они по-прежнему используют файлы за кулисами и содержат всю логику, чтобы сделать что-то похожее на псевдокод выше, включая схемы блокировки, чтобы избежать всех случаев краев.

Смежные вопросы