如何知道 7-Zip 的压缩率?
Posted
技术标签:
【中文标题】如何知道 7-Zip 的压缩率?【英文标题】:How to know the compression rate for 7-Zip? 【发布时间】:2015-07-27 09:33:02 【问题描述】:我有以下代码用于使用 7zip 创建拆分存档。
压缩级别: MX9
分割存档大小: 1MB
static void Main(string[] args)
string zipFileName = @"D:\ZIP\zipfile.7z";
string temp = @"D:\ZIP\ZM.pdf";
ProcessStartInfo info = new ProcessStartInfo();
info.FileName = AppDomain.CurrentDomain.BaseDirectory + @"..\..\7za.exe";
/**
* Switch -mx0: Don't compress at all. This is called "copy mode."
* Switch -mx1: Low compression. This is called "fastest" mode.
* Switch -mx3: Fast compression mode. Will automatically set various parameters.
* Switch -mx5: Same as above, but "normal."
* Switch -mx7: This means "maximum" compression.
* Switch -mx9: This means "ultra" compression.You probably want to use this.
**/
info.Arguments = string.Format("a -t7z \"" + zipFileName + "\" \"" + temp + "\" -v0k " + CompressionLevel.mx9, 1024);
info.WindowStyle = ProcessWindowStyle.Hidden;
Process process = Process.Start(info);
process.WaitForExit();
Console.WriteLine("Done zipping");
Console.ReadLine();
通常对于 10MB 的文件,我会得到 9 个扩展名为 .7z.001, .7z.002, .7z.003
的 .7z 文件,依此类推。所以对于一个 1MB 的文件,我得到一个扩展名为 .7z.001
的 .7z 文件。如果只生成一个文件,我想要实现的是消除 .001
扩展名。有什么方法可以知道 7zip 会根据其压缩率生成多少拆分档案?我正在处理 PDF 文件。
编辑:
基本上我想做的是决定是否创建拆分档案。所以我不得不猜测生成的文件是否会大于 1MB。
【问题讨论】:
您为什么不停止告诉 7zip 拆分存档?那应该是一个命令行选项。它当然是主 GUI 中的一个选项。 @AdamHouldsworth 是的,我可以从命令行中删除V
选项。我想知道的是生成的文件大小。
这很困难,而且性能可能与仅进行压缩并检查生成的文件大小相当。您可以围绕已知内容进行一些猜测,但除此之外,这样做会导致收益递减。只需执行压缩,如果您只计算一个使用通配符搜索类似.7z.*
的文件,然后手动重命名它以切断扩展名。
@AdamHouldsworth 这实际上是一个很好的建议。如果只找到 1 个文件,则剪切 .001
。
【参考方案1】:
不可能知道生成的文件的大小,除非您能够分析大小的内容并检查它的压缩程度。 (据我所知,这只能通过实际压缩来完成。)
例如,仅包含文本的 PDF 文件可能比仅包含压缩图像的文件更易于压缩。最好的解决方案是停止拆分档案,或者在压缩输入后检查 .002
(etc.) 文件是否存在。
另一种解决方案是使用 C# LZMA sdk 压缩内存中的文件,然后在适当的情况下手动拆分文件。
【讨论】:
好吧,我真的必须拆分档案,因为这将通过限制为 25 MB 的 Gmail 发送。对于稍微超过 25 MB 的文件,我不确定它是生成a 25MB and a 1MB file
还是 a 24 MB file
- 一切都取决于压缩率。检查.002
的存在实际上很棒。类似于@AdamHouldsworth 的建议。【参考方案2】:
您可以尝试压缩 PDF 文件的各种组合并平均压缩率,然后您会知道粗略的输入大小,之后您会得到多个存档。
也就是说,这并不准确。更简单的方法是等待 7-zip 完成,然后检查您有多少文件,如果您只有一个文件,则删除 .001
。
【讨论】:
以上是关于如何知道 7-Zip 的压缩率?的主要内容,如果未能解决你的问题,请参考以下文章