我遇到了文件访问问题。
主要问题是我无法在文件夹选择器获取的文件夹中写入 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'被拒绝'。
错误是正确的:您没有直接访问该文件夹的权限。现在,您最好的选择可能是创建一个 ZipArchive,通过FolderQuery枚举文件夹并将每个文件单独传输到ZipEntry 中。
更多细节:
您的访问权限是通过文件选择器返回的 StorageFolder 授予的,并且需要通过该 StorageFolder 使用。
引用您链接的文件访问权限文档并为清楚起见添加一些重点:
检索代表应用程序数据位置的 StorageFolder 后,您可以使用 StorageFolder 方法访问该位置中的文件和文件夹。
由于 ZipFile 不使用 StorageFolder 方法,因此无法到达目标文件夹。权限未附加到传递给 ZipFile 的 Path。
我在我的博客文章中更深入地讨论了这个问题跳过路径:坚持使用 StorageFile
正在通过直接文件系统调用来探测代理访问,但尚未完成。在当前版本的 Windows 10 中,您可以使用 IStorageFolderHandleAccess、IStorageItemHandleAccess或CreateFile2FromApp来获取本机文件 HANDLE,您可以使用它来创建 System.IO.File 对象,但它不适用于 .Net 类,例如采用路径并自行打开文件。