gpt4 book ai didi

c# - Windows Phone 隔离存储防止文件在退出时损坏

转载 作者:太空宇宙 更新时间:2023-11-03 13:29:33 25 4
gpt4 key购买 nike

在 Windows Phone 上使用隔离存储的新手。

我想在我的 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

数据库并没有回避这个问题,而是解决了这个问题。他们仍然在幕后使用文件,并且确实包含执行与上述伪代码类似的操作的所有逻辑,包括避免所有边缘情况的锁定方案。

关于c# - Windows Phone 隔离存储防止文件在退出时损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21131938/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com