如何知道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。

如何知道7-Zip的压缩率

不可能知道结果文件的大小,除非您能够分析大小的内容并检查它可以被压缩到什么程度。(据我所知,这只能通过实际压缩来完成。)

例如,一个只包含文本的PDF文件可能比一个只包含压缩图像的文件更容易被压缩。最好的解决方案是停止拆分归档,或者在压缩输入后检查.002(等)文件的存在。

另一个解决方案是使用c# LZMA sdk在内存中压缩文件,然后在适当的情况下手动拆分文件。

您可以尝试压缩PDF文件的各种组合并计算平均压缩率,然后您就会知道大致的输入大小,之后您将最终得到多个存档。

也就是说,它不会是精确的。更简单的方法是等待7-zip完成,然后检查您有多少文件,如果只有一个文件,则删除.001