System.IO.Compression.ZipFile.CreateFromDirectory - 在 Mac 上打开时没有文件夹结构

Posted

技术标签:

【中文标题】System.IO.Compression.ZipFile.CreateFromDirectory - 在 Mac 上打开时没有文件夹结构【英文标题】:System.IO.Compression.ZipFile.CreateFromDirectory - no folder-structure when opened on Mac 【发布时间】:2019-10-22 09:47:08 【问题描述】:

我正在使用创建拉链 System.IO.Compression.ZipFile.CreateFromDirectory(startPath,zipPath)。 之后在 Windows 上一切都很好 - 他们解压得很好。如果我在 MacOS (Mojave) 上解压这些文件,文件夹结构就会丢失。 例如,我有 ziptest.zip:

A/B/C/file1.txt
A/B/C/file1.txt

在 MacOS 上(使用上下文菜单的“打开方式...存档实用程序(标准)”,我得到一个文件夹 ziptest,其中包含文件 A\B\C\file1.txtA\B\C\file2.txt。 看起来好像目录分隔符是问题所在。但我不敢相信 MS 会如此盲目地错过这个问题。 (虽然这似乎很常见 - 我尝试了各种 cmdline-zippers,但只有 SFK 做得对......) 是否有一个简单的解决方案,或者它真的是一个 MS 错误? (我们怎样才能修复它......?)

更新以回答 Panagiotis 的问题:我正在使用对应于 4.8 的版本 528040。 (不幸的是,它不再像System.Environment.Version 那样简单,我们又来检查registry...)

【问题讨论】:

您使用哪个 .NET 版本来压缩数据? This possibly duplicate question 解释说从 4.6.1 开始使用正斜杠。 好问题,谢谢!应该提到这一点 - 所以我更新了问题...... 所以它是 not .NET Core 正如标签所说 对 - 我必须检查为什么不是。但还是。 4.8>4.6.1... 无复制。调用 ZipFile.CreateFromDirectory(@"c:\somesource",@"c:\somefolder\target.zip"); 会生成一个 zip,当使用存档实用程序打开时,它会重建在 somesource 中找到的所有子文件夹。您必须发布一个实际重现问题的最小示例。在 Catalina 上试过 【参考方案1】:

感谢 Panagiotis Kanavos 对此进行调查 - 我在 C# 中尝试了一个 repro 并且它也有效 - 所以它一定是我正在使用的开发环境中的一个错误。将向制造商报告。很高兴这不是 MS 的错。

【讨论】:

以上是关于System.IO.Compression.ZipFile.CreateFromDirectory - 在 Mac 上打开时没有文件夹结构的主要内容,如果未能解决你的问题,请参考以下文章