使用Ionic Zip Library将文件夹添加到Zip的根目录

我正在尝试做的是使用Ionic Zip库(c#)将文件夹和文件列表全部添加到我的Zip文件的根目录中。

这是我到目前为止所拥有的

string k = "B:/My Documents/Workspace"; private void button1_Click(object sender, EventArgs e) { using (ZipFile zip = new ZipFile()) { //add directory, give it a name zip.AddDirectory(k); zip.Save("t.zip"); } } 

现在,我希望我的拉链看起来像这样。

  • t.zip
    • 随机文件和文件夹

但它看起来像这样。

  • t.zip
    • t(文件夹)
      • 随机文件和文件夹

任何帮助将不胜感激,谢谢。

AddDirectory的默认行为应该将目录的内容添加到zipfile中的根路径,而不创建子目录。

AddDirectory有第二个重载,它添加一个参数来指定添加文件的路径应该在zipfile中。 但由于您希望文件进入根目录,因此这只是一个空字符串。

 zip.AddDirectory(k, ""); 

有关详细信息,请参阅此文档 。

这些都不能解释子文件夹的来源。 我怀疑问题来自代码中的其他内容。 在调试中运行它可能很有用,并在调用AddDirectory时查看“k”等于什么,或打印出zip.Entries集合中的所有“条目”。

试试这个

 using (ZipFile zip = new ZipFile()) { zip.AddFiles(sourcefiles, ""); //For saving things at root of your zip foreach (DirectoryInfo objFile in objDir.GetDirectories()) { zip.AddDirectory(objFile.FullName, objFile.Name); ///For saving subdirectories within zip } zip.Save(pathzipfile + ".zip"); } 

为什么不尝试这样的事情:

 foreach (var file in System.IO.Directory.GetFiles(k)) { zip.AddFile(file); } 

要使目录和文件达到无限深度,将其与基于System.IO.Directory.GetDirectories("path")的递归方法相结合 – 应该是非常简单的方法。