为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
陪伴而非守候 2022-01-09 14:57:16
我遇到了文件访问问题。主要问题是我无法在文件夹选择器获取的文件夹中写入 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'”。
查看完整描述

2 回答

?
哔哔one

TA贡献1854条经验 获得超8个赞

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

更多细节:

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

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

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

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

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

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


查看完整回答
反对 回复 2022-01-09
?
Helenr

TA贡献1780条经验 获得超4个赞

我使用 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!");

                        }

                    }

                }



查看完整回答
反对 回复 2022-01-09
  • 2 回答
  • 0 关注
  • 859 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号