使用 System.IO.Compression 创建的 Zip 文件不会显示 Mac 上的目录

Zip files created with System.IO.Compression won't show directories on Mac

我正在创建一个包含以下结构的 zip 文件:

readme.html
my-directory\foo.txt

var zip = new ZipArchive(...);
zip.CreateEntryFromFile("c:\readme.html", "readme.html");
zip.CreateEntryFromFile("c:\foo.txt", "my-directory\foo.txt");

这会创建一个在 Windows:

上运行良好的 zip 文件

但是,如果我在 Mac 上打开 zip 文件,则没有 my-directory 文件夹。相反,foo.txt 的名称为 my-directory\foo.txt:

如何将目录添加到 zip 文件,以便该目录显示在 Mac 的 zip 文件中?

为了更好的可移植性,我建议您使用 c# 中的 Path class 来形成您的路径,如下所示:

string root = @"c:\"; // different mount point if in mac

zip.CreateEntryFromFile(Path.Combine(root, "readme.html"), "readme.html");
zip.CreateEntryFromFile(Path.Combine(root, "my-directory", "foo.txt"), Path.Combine("my-directory", "foo.txt"));

原来,我忘记了 Windows 和 Mac 之间的目录分隔符不同。

修复是通过使用“/”字符创建目录,它适用于 Windows 和 Mac:

zip.CreateEntryFromFile("c:\foo.txt", "my-directory/foo.txt");