3

StorageFile我有一个 Metro 风格的应用程序,它每 X 秒轮询一次存储在隔离存储中的文件(这是对对象的引用)。

它是一个 PDF 文件,在我的应用程序中,我允许用户使用本机阅读器应用程序打开文档并更改文档。

我的问题是我在轮询文档时调用OpenStreamForReadAsyncStorageFile但是如果您在用户保存对 Reader 应用程序中对文档所做的更改的精确时刻执行此操作,我会Access denied抛出异常。

我假设这是因为 Windows 正在写入文件,这很好,我只需要知道如何查询本地StorageFile引用以查看是否允许我打开它。(理想情况下,没有调用OpenStreamForReadAsync包裹在 try catch 中)。

4

1 回答 1

4

Windows 团队会告诉你做 try/catch 的事情。当我要求 File.Exists() API 时,他们就是这么告诉我的。

原因是这样的:假设您正在寻找的 API 存在......如果在您调用该 API 和尝试打开文件之间的几毫秒内,文件被打开/删除/重命名,会发生什么?繁荣!您又回到了最初的异常,需要进行一次 try/catch 以避免难以重现的崩溃。因此,既然您无论如何都需要捕获此异常,那么您不妨捕获该异常。通过不提供 File.Exists 或您正在寻找的 API,它们迫使我们捕获异常,因此用户不会遇到这些罕见的竞争条件错误。

于 2012-07-03T14:53:54.573 回答