2016-10-03 64 views
0

我试图确保文件被复制到另一个位置 - 为SQLite的原因(见UWP App SQLite Access database in Documents Library)。在UWP验证文件写入C#

问题是,如果我删除了对目标StorageFile的访问(即拔出USB棒然后尝试保存),StorageFile的CopyAndReplaceAsync方法将不会提及该文件是否写入失败。

因此,试图打开文件以测试它是否成功写入(使用GetFileFromPathAsync)会引发COM异常(因为该文件不存在),但即使在捕获错误之后它也不会结束任务。

我想弄清楚是否有更好的方法来做到这一点 - 我试过使用FileIO做同样的事情,但即使我正在写的文件是在FutureAccessList它似乎并不想要授予访问权限。

任何想法/并发症/方法我只是没有正确使用?

相关的代码我有低于:

​​

回答

0

根据你的描述,似乎你要检查文件是否存在。如果是这样,您可以使用StorageFile.IsAvailable属性或StorageFolder.TryGetItemAsync方法。

参考Common questions and answers about files and app data, part 2: Files

问:什么是来检查文件是否存在的最佳方法?

A.在Windows上,使用StorageFile.IsAvailable属性或StorageFolder.TryGetItemAsync方法,这两个方法都是在Windows 8.1中为此目的而引入的。但是,在Windows Phone 8.1上,这些成员不可用,因此目前必须在try/catch块内调用StorageFolder.GetFileAsync,并检查“文件未找到”异常。 (这种方法也适用于Windows。)请注意,如果您正在检查以确定是否创建该文件,那么只需使用StorageFolder.CreateFileAsyncCreateCollisionOption.OpenIfExists即可。

虽然本文是为Windows 8.1和Windows Phone 8.1编写的,但它仍适用于UWP应用程序。而在UWP中,StorageFile.IsAvailable属性和StorageFolder.TryGetItemAsync方法是通用API,它们可以用于所有Windows 10设备。