【问题标题】:Verifying file writes in UWP C#在 UWP C# 中验证文件写入
【发布时间】:2017-02-11 06:11:11
【问题描述】:

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

问题在于,如果我删除了对目标 StorageFile 的访问权限(即拔出 U 盘然后尝试保存),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

【问题讨论】:

    标签: c# windows-runtime uwp storagefile sqlite.net


    【解决方案1】:

    根据您的描述,您似乎想检查文件是否存在。如果是这样,您可以使用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 设备中使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-22
      • 1970-01-01
      • 2018-09-18
      • 2017-06-01
      • 2017-05-16
      • 2021-05-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多