首页 文章

验证UWP C#中的文件写入

提问于
浏览
0

我正在尝试确保将文件复制到另一个位置 - 出于SQLite的原因(请参阅UWP App SQLite Access database in Documents Library) .

麻烦的是,如果我删除对目标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

1 回答

  • 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.CreateFileAsync和CreateCollisionOption.OpenIfExists .

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

相关问题