【问题标题】:DotNetZip add files without creating foldersDotNetZip 添加文件而不创建文件夹
【发布时间】:2010-11-08 16:09:55
【问题描述】:
using (ZipFile zip = new ZipFile())
{
    foreach(string file in Directory.GetFiles(folder))
    {
        zip.AddFile(file, Path.GetFileName(file));
    }
    zip.Save("test.zip"));
}

每次我添加一个文件时,它都会为它创建一个新的子文件夹。

所以我想结束:

test.zip
    -  myDoc.doc
    -  myPdf.pdf

但我最终得到:

test.zip
    -  myDoc.doc
        -  myDoc.doc
    -  myPdf.pdf
        -  myPdf.pdf

【问题讨论】:

    标签: c# zip directory dotnetzip


    【解决方案1】:

    怎么样:

    zip.AddFile(file,"");
    

    zip.AddFile(file,@"\");
    

    【讨论】:

    • 那就更糟了。例如 Documents\Process\Practices\text.doc 的文件路径将在 .zip 中为路径中的每个级别创建一个子文件夹,因此您最终会得到 test.zip -> Documents -> Process -> Practices -> text.doc
    • @Fosco 这行得通。是否有任何完整的文档?我正在使用来自 nuGet 的 IonicZip.dll。
    • dotnet zip 压缩率不好。我用 dotnet zip 压缩了一个 152 KB 的 doc 文件,当创建 zip 时,我的 zip 文件大小为 136KB。是否存在任何创建小尺寸 zip 文件的调整。分享知识。谢谢
    • @Mou - doc 文件现在类似于 .zip 文件,并且它们大部分已经被压缩。内部仍有部分未压缩 - 以便外部程序可以读取属性/摘要信息等 - 但通常,它们已经非常紧凑。
    • @Fosco 感谢您提供出色的解决方案。你节省了我的时间。
    【解决方案2】:

    因为经过验证的答案是 4 年前,现在一天是另一种方式(更优雅),如果你想压缩目录中的所有文件(上面的代码看起来像它),你可以使用:

    ZipFile.CreateFromDirectory(sourceDirectoryName, destinationArchiveFileName, compressionLevel, includeBaseDirectory)
    

    您对最后一个参数(includeBaseDirectory)和传递错误值感兴趣。

    您可以在这里找到更多信息:CreateFromDirectory(String, String, CompressionLevel, Boolean)

    【讨论】:

      【解决方案3】:
      zip.AddFile(file, "..\...\".ToString.Replace("..\...\", null))
      

      【讨论】:

        【解决方案4】:

        这就是我所做的,并且成功了。

        zip.AddFile(file, "..\...\".ToString.Replace("..\...\", Nothing))
        

        它将文件发送回 2 个文件夹,并将 .....\ 替换为 Nothing。

        【讨论】:

          猜你喜欢
          • 2017-07-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-12-08
          • 1970-01-01
          • 1970-01-01
          • 2012-02-04
          • 2020-06-07
          相关资源
          最近更新 更多