c# - Windows 8 中的 StorageFile 访问被拒绝异常

标签 c# windows-8 storagefile

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

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

我的问题是,当我轮询文档时,我在 StorageFile 上调用了 OpenStreamForReadAsync,但是如果您在用户保存所做更改的精确时刻执行此操作到阅读器应用程序中的文档,我收到一个 Access denied 异常被抛出。

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

最佳答案

Windows 团队会告诉您执行 try/catch 操作。当我请求 File.Exists() API 时,他们就是这么告诉我的。

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

关于c# - Windows 8 中的 StorageFile 访问被拒绝异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11303256/

相关文章:

c# - System.Environment.TickCount 的 WinRT 替换

c# - 你可以从它的路径访问一个选择的 StorageFile 吗? - UWP

c# - 如何在 Windows RT 中发送击键

C# Windows 服务需要修改注册表

C#:填充 DataGridView 字段的宽度并在需要时添加滚动条

c# - C# 中的 Foreach 与 for 循环。在 for 循环中可以创建新对象,但在 foreach 循环中是不可能的

windows-8 - 如何在 Windows 8 METRO 应用程序中实现错误日志记录?

javascript - 将 StorageFile 端到端读入字符串的最简单方法?

c# - 如何访问文件夹并获取 WinRT 类库中的存储文件列表?

c# - 为任何给定的 SQL Server 表选择除第一列以外的所有列