为什么 ZipFile.CreateFromDirectory 在此处拒绝访问?

Jeo*_*Han 5 c# zipfile uwp

我遇到了文件访问问题。

主要问题是我无法在文件夹选择器获取的文件夹中写入 ZipFile

虽然我一直在研究这个项目,但在遇到这个 ZipFile 问题之前,我做了很多与创建文件、删除文件以及在该文件夹中创建文件夹相关的工作。这个问题似乎无关紧要。

正如文件访问文档所说,我对用户在使用文件夹选择器时选择的文件夹具有访问权限。

但我无法在该文件夹中创建此 ZipFile。以下是我的来源和例外。

string zipfPath = folder.Path + @"\" + i.ToString() + ".zip";
await folder.CreateFolderAsync("DADADAD");
ZipFile.CreateFromDirectory(folder.Path + @"/DADADAD", zipfPath);
Run Code Online (Sandbox Code Playgroud)

拒绝

为什么我无法访问该文件夹ZipFile.Create(Path string)?使用 UWP 时是否有其他要求?ZipFile.Create也许我只是我的误用?

编辑

异常消息遵循 System.UnauthorizedAccessException: 'Access to the Path 'C:\Users\yohan\Desktop\? ?? (2)\1.zip'被拒绝'。

Rob*_*SFT 7

错误是正确的:您没有直接访问该文件夹的权限。现在,您最好的选择可能是创建一个 ZipArchive,通过FolderQuery枚举文件夹并将每个文件单独传输到ZipEntry 中

更多细节:

您的访问权限是通过文件选择器返回的 StorageFolder 授予的,并且需要通过该 StorageFolder 使用。

引用您链接的文件访问权限文档并为清楚起见添加一些重点:

检索代表应用程序数据位置的 StorageFolder 后,您可以使用 StorageFolder 方法访问该位置中文件和文件夹。

由于 ZipFile 不使用 StorageFolder 方法,因此无法到达目标文件夹。权限未附加到传递给 ZipFile 的 Path。

我在我的博客文章中更深入地讨论了这个问题跳过路径:坚持使用 StorageFile

正在通过直接文件系统调用来探测代理访问,但尚未完成。在当前版本的 Windows 10 中,您可以使用 IStorageFolderHandleAccessIStorageItemHandleAccessCreateFile2FromApp来获取本机文件 HANDLE,您可以使用它来创建 System.IO.File 对象,但它不适用于 .Net 类,例如采用路径并自行打开文件。