【问题标题】:Why zipping the folder is not compressing its size?为什么压缩文件夹不会压缩其大小?
【发布时间】:2016-04-18 21:59:56
【问题描述】:

我正在使用此例程从现有目录创建 Zipfile。它编译并且不会引发运行时错误。但是,在减小尺寸方面,它并没有完成任务。

using Ionic.Zip;

//..

using (ZipFile zip = new ZipFile())

{
    zip.AddDirectory(SourceFolder);

    zip.Save(DestinationFolder + FolderName + ".zip");
}

原始文件夹包含PNG 图像、一个.xlsx 文件和一个.xml 文件,压缩后的文件夹始终具有相同的大小(不完全相等但非常相似)。可能的原因有哪些?图书馆不好?

这些文件夹会不断生成。因此,在磁盘上占用了大量空间,我们需要每天检查/清理。我可以做些什么来减少这种情况?

【问题讨论】:

  • 好吧,如果大部分数据是已经压缩的图像,那是完全可以预料的。如果您只是在同一组文件上运行常规 zip 工具会发生什么?
  • 你不能压缩图片并且xlsx已经被压缩了
  • 为什么投反对票?
  • @jonskeet 我尝试了一个普通的压缩工具,得到了相同的结果。我现在看到了。所以我能做些什么来压缩它?即使有任何有损方法?那时我不在乎图像的质量
  • 要缩小图像,您必须使用绘画等工具并选择不同的图像质量。它不能用 zip 来完成。

标签: c#


【解决方案1】:

您可以尝试添加这一行:

zip.CompressionLevel = Ionic.Zlib.CompressionLevel.BestCompression; 

但正如@JonSkeet 所说,它不会做太多事情。图片和视频的压缩程度不会超过它们现在的程度。

它不适用于 OP,但供将来参考:

【讨论】:

  • 这听起来可能很有趣:使用那行代码,结果的大小增加了
  • zip 不适用于图片。如果你想节省空间,你可以将图片转换为不同的格式。这种方法的问题在于它不适用于 png 请参阅此处*.com/questions/4418454/…
【解决方案2】:

我在这里找到了一些关于 codeplex 的示例:https://dotnetzip.codeplex.com/wikipage?title=CS-Examples&referringTitle=Examples

但我发现最相关的是这个,它的特点是选择最佳压缩方法:

using (ZipFile zip = new ZipFile())
{
  zip.CompressionLevel= Ionic.Zlib.CompressionLevel.BestCompression;
  zip.AddFile("Datafeed-2008-12-20.csv");
  zip.Save(ZipFileToCreate);
}

我希望这会有所帮助。

【讨论】:

  • 结果大小变大了
  • 尝试运行一些更可压缩的内容。除了您的 .xlsx.xml 文件之外的所有内容很可能已经被很好地压缩了。
  • .xlsx 是 Microsoft Excel 文件扩展名。