如何知道7-Zip的压缩率?

时间:2015-07-27 09:33:02

标签: c# 7zip

我有以下使用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.001, .7z.002, .7z.003的.7z文件,依此类推。因此,对于1MB的文件,我会得到一个扩展名为.7z.001的.7z文件。我想要实现的是,如果只生成一个文件,则消除.001扩展名。有没有办法知道7zip将根据其压缩率生成多少个拆分档案?我正在处理PDF文件。

修改

基本上我想要做的是决定是否创建拆分档案。所以我必须猜测生成的文件是否大于1MB。

2 个答案:

答案 0 :(得分:2)

除非您能够分析大小的内容并检查其压缩程度,否则无法知道生成的文件的大小。 (据我所知,这只能通过实际压缩它来完成。)

例如,仅包含文本的PDF文件可能比仅由压缩图像组成的文件更易于压缩。最好的解决方案是在压缩输入后停止拆分档案或检查.002(等)文件是否存在。

另一种解决方案是使用C#LZMA sdk在内存中压缩文件,然后在适当时手动拆分文件。

答案 1 :(得分:0)

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

那就是说,它不会准确。一个更简单的事情是等待7-zip完成,然后检查你有多少文件,如果你只有一个文件,则删除.001