C# windows 8中的StorageFile访问被拒绝异常
我有一个metro风格的应用程序,它每X秒轮询一个存储在独立存储中的文件(它是对C# windows 8中的StorageFile访问被拒绝异常,c#,windows-8,storagefile,C#,Windows 8,Storagefile,我有一个metro风格的应用程序,它每X秒轮询一个存储在独立存储中的文件(它是对StorageFile对象的引用) 这是一个PDF文件,在我的应用程序中,我允许用户使用本机Reader应用程序打开文档并对文档进行更改 我的问题是,当我轮询文档时,我调用了StorageFile上的OpenStreamForReadAsync,但是如果您在用户在Reader应用程序中保存对文档所做的更改的准确时刻执行此操作,我会引发一个拒绝访问异常 我假设这是因为Windows正在写入该文件,这很好,我只需要知道如
StorageFile
对象的引用)
这是一个PDF文件,在我的应用程序中,我允许用户使用本机Reader应用程序打开文档并对文档进行更改
我的问题是,当我轮询文档时,我调用了StorageFile
上的OpenStreamForReadAsync
,但是如果您在用户在Reader应用程序中保存对文档所做的更改的准确时刻执行此操作,我会引发一个拒绝访问
异常
我假设这是因为Windows正在写入该文件,这很好,我只需要知道如何查询本地
StorageFile
引用以查看是否允许打开它。(理想情况下,无需调用封装在try-catch中的OpenStreamForReadAsync
。Windows团队会告诉您执行try/catch操作。当我要求一个File.Exists()API时,他们就是这么告诉我的
理由是:假设您正在寻找的API存在。。。如果在调用该API和尝试打开文件之间的毫秒内,文件被打开/删除/重命名,会发生什么情况?繁荣您回到了最初的异常状态,需要执行try/catch以避免难以重现的崩溃。因此,既然您无论如何都需要捕获此异常,那么您也可以捕获该异常。通过不提供File.Exists或您正在寻找的API,他们迫使我们捕获异常,这样用户就不会遇到这些罕见的竞争条件错误。很公平,我已经实现了,但感觉不对:)