如何知道7-Zip的压缩率
本文关键字:压缩率 7-Zip 何知道 | 更新日期: 2023-09-27 18:04:45
我有下面的代码来创建拆分归档使用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 + "'" -v{0}k " + CompressionLevel.mx9, 1024);
info.WindowStyle = ProcessWindowStyle.Hidden;
Process process = Process.Start(info);
process.WaitForExit();
Console.WriteLine("Done zipping");
Console.ReadLine();
}
通常对于一个10MB的文件,我得到9个。7z文件,扩展名为.7z.001, .7z.002, .7z.003
等等。因此,对于一个1MB的文件,我得到一个扩展名为.7z.001
的。7z文件。我想要实现的是消除.001
扩展,如果只有一个文件生成。根据7zip的压缩率,有没有办法知道它会生成多少个拆分归档?我在处理PDF文件。
基本上我想做的是决定是否创建分割档案。所以我不得不猜测结果文件是否会大于1MB。
不可能知道结果文件的大小,除非您能够分析大小的内容并检查它可以被压缩到什么程度。(据我所知,这只能通过实际压缩来完成。)
例如,一个只包含文本的PDF文件可能比一个只包含压缩图像的文件更容易被压缩。最好的解决方案是停止拆分归档,或者在压缩输入后检查.002
(等)文件的存在。
另一个解决方案是使用c# LZMA sdk在内存中压缩文件,然后在适当的情况下手动拆分文件。
您可以尝试压缩PDF文件的各种组合并计算平均压缩率,然后您就会知道大致的输入大小,之后您将最终得到多个存档。
也就是说,它不会是精确的。更简单的方法是等待7-zip完成,然后检查您有多少文件,如果只有一个文件,则删除.001
。