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

6
我将尝试使用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");
   }
}

现在,我希望我的zip文件看起来像这样。
  • t.zip
    • 随机文件和文件夹
但它看起来像这样。
  • t.zip
    • t(文件夹)
      • 随机文件和文件夹
任何帮助都将不胜感激,谢谢。
3个回答

10

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

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

zip.AddDirectory(k, "");

请查看此文档以获取更多信息。

这并没有解释您的子文件夹是从何而来。我怀疑问题来自代码中的其他部分。运行调试并查看调用AddDirectory时'k'等于什么,或打印出zip.Entries集合中的所有“entries”可能会有帮助。


谢谢,我会去试一下。 - Movieboy
好的,我尝试了那个方法,但它仍然创建了子文件夹,还有其他想法吗? - Movieboy
在我的测试中,AddDirectory没有创建子文件夹 - 即使我不传递空字符串,它仍然不会创建子文件夹。你的代码中是否还有其他可能创建该文件夹的内容? - Slider345
不是我所知道的,那就是我所拥有的唯一代码,逐字逐句哈哈,而且我尝试过不同类型的数据。但我敢打赌,在某个时候它是按预期工作的,最近才开始这样做。让我检查一下我的库和我正在使用的 Ionic 版本。 - Movieboy

2

试试这个

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");
    }

太好了!谢谢伙计。你使用这行代码 zip.AddFiles(sourcefiles, ""); 做得很棒,可以将文件保存在zip的根目录下。 - Zia Ur Rahman

0

为什么不试试这样:

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

要获取无限深度的目录和文件,结合基于System.IO.Directory.GetDirectories("path")的递归方法即可 - 应该很简单。

1
哦,对了,刚刚测试的时候,我做了这个:var imagePath = basePath + "Content\\Images\\"; zip.AddDirectory(imagePath); - 它会将我的 Images 文件夹中的文件和文件夹递归地添加到根目录中,就像你想要的那样。 - Joel Peltonen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接