猿问

为什么 ZipFile.CreateFromDirectory 在这里拒绝访问?

我遇到了文件访问问题。


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


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


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


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


string zipfPath = folder.Path + @"\" + i.ToString() + ".zip";

await folder.CreateFolderAsync("DADADAD");

ZipFile.CreateFromDirectory(folder.Path + @"/DADADAD", zipfPath);

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

编辑

System.UnauthorizedAccessException 之后出现异常消息  “拒绝访问路径 'C:\Users\yohan\Desktop\새 폴더 (2)\1.zip'”。


陪伴而非守候
浏览 860回答 2
2回答

哔哔one

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

Helenr

我使用 StorageFile、Stream、ZipArchive、ZipArchiveEntry、Stream Writer 来实现。下面是我在文件夹选择器()获取的文件夹中创建 zip 文件的简短源代码。它工作得很好。Rob Caplan,感谢您非常清楚的解释。                StorageFile f = await folder.CreateFileAsync("test.zip");                using (Stream s = (await f.OpenStreamForWriteAsync()))                {                    using (ZipArchive zz = new ZipArchive(s, ZipArchiveMode.Update))                    {                        ZipArchiveEntry read = zz.CreateEntry("scc.txt");                        using (StreamWriter sw = new StreamWriter(read.Open()))                        {                            await sw.WriteLineAsync("StackOverFlow");                            await sw.WriteLineAsync("Thanks!");                        }                    }                }
随时随地看视频慕课网APP
我要回答