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

C# 使用Ionic Zip库将文件夹添加到Zip的根目录,c#,zip,dotnetzip,C#,Zip,Dotnetzip,我试图做的是使用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

我试图做的是使用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、 拉链
    • 随机文件和文件夹
但看起来是这样的

  • t、 拉链
    • t(文件夹)
      • 随机文件和文件夹

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

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

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

zip.AddDirectory(k, "");
有关更多信息,请参阅


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

为什么不尝试类似的操作:

foreach (var file in System.IO.Directory.GetFiles(k))
{
    zip.AddFile(file);
}
要获得无限深度的目录和文件,请将其与基于
System.IO.Directory.GetDirectories(“path”)的递归方法相结合。
我认为应该非常简单。

试试这个

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

谢谢,我要试一下好的,我试过了,它仍然创建了子文件夹,还有其他想法吗?在我的测试中,AddDirectory没有创建子文件夹——即使我没有传递空字符串,它也不会创建子文件夹。你的代码中还有其他可能创建该文件夹的东西吗?据我所知,这是我仅有的代码,逐字逐句的lol,我尝试了所有不同类型的数据。我可以发誓,虽然在某一点上,它的工作是预期的,只是最近才开始这样做。让我检查一下我的库和我正在使用的Ionic版本是的,我刚刚测试过:
var-imagePath=basePath+“Content\\Images\\”;AddDirectory(imagePath)-它将“我的图像”文件夹中的文件和文件夹递归地直接添加到根目录,就像您希望自己的文件夹那样。这太棒了!谢谢你,伙计。您使用这行代码zip.AddFiles(sourcefiles,“”)做了一件很棒的工作//从根本上保存东西