在 UWP C# 中验证文件写入

Verifying file writes in UWP C#

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

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

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

我正在尝试找出是否有更好的方法来执行此操作 - 我尝试使用 FileIO 来做同样的事情,但即使我正在编写的文件在 FutureAccessList 中,它似乎也没有想要授予访问权限。

任何ideas/complications/methods我只是没有正确使用?

我手头的相关代码如下:

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

//user prompt below

根据您的描述,您似乎想检查一个文件是否存在。如果是这样,你可以使用StorageFile.IsAvailable property or the StorageFolder.TryGetItemAsync方法。

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

Q. What’s the best way to check for the existence of a file?

A. On Windows, use the StorageFile.IsAvailable property or the StorageFolder.TryGetItemAsync method, which were both introduced in Windows 8.1 for this purpose. On Windows Phone 8.1, however, these members are not available, so currently you have to call StorageFolder.GetFileAsync within a try/catch block and check for “file not found” exceptions. (This approach also works on Windows.) Note that if you’re checking to determine whether to create the file, then just use StorageFolder.CreateFileAsync with CreateCollisionOption.OpenIfExists.

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