【问题标题】:StorageFile access denied exception in windows 8Windows 8 中的 StorageFile 访问被拒绝异常
【发布时间】:2012-07-03 01:12:16
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: c# windows-8 storagefile


    【解决方案1】:

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

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

    【讨论】:

    • 很公平,我已经实现了,但感觉不对:)
    猜你喜欢
    • 1970-01-01
    • 2019-06-28
    • 1970-01-01
    • 2012-05-19
    • 2014-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-25
    相关资源
    最近更新 更多