0

我试图确保将文件复制到另一个位置 - 出于 SQLite 的原因(请参阅文档库中的 UWP App SQLite Access 数据库)。

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

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

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

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

我拥有的相关代码如下:

try {
    if (file != null) {
        await file.CopyAndReplaceAsync(App.SaveFile);
        var newFile = await StorageFile.GetFileFromPathAsync(App.SaveFile.Path);
 }

//user prompt below
4

1 回答 1

0

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

参考有关文件和应用程序数据的常见问题和解答,第 2 部分:文件

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

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 设备中使用。

于 2016-10-04T09:44:05.467 回答