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

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

  • 压缩包
    • 随机文件和文件夹

但它看起来像这样。

  • 压缩包
    • t(文件夹)
      • 随机文件和文件夹

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

4

3 回答 3

10

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

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

zip.AddDirectory(k, "");

有关更多信息,请参阅此文档

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

于 2012-10-29T20:36:06.080 回答
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");
    }
于 2013-09-19T11:13:13.090 回答
0

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

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

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

于 2013-07-23T11:42:49.550 回答