使用 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");
我正在创建一个包含以下结构的 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");