如何在解压前查看未压缩的大小

时间:2013-10-14 18:13:47

标签: c# vb.net zip gzip dotnetzip

我正在使用DotNetZip来提取来自extenal(不值得信赖)来源的zip文件。我的问题是zip文件本身可能是几千字节,但解压缩的内容可能会变成PB级。如何在拆包前查看未压缩的大小?有没有可靠的方法来查看它并防止OutOfMemoryException?

如下所述,可以使用离子拉链完成:

using (ZipFile zip = ZipFile.Read(zipFile))
                {
                 // Option 2 - will need to sift through the mass of info

                 info = zip.Info;

foreach (ZipEntry e in zip)
                    {
                        long uncompressedsize = e.UncompressedSize;
                        // Option 1
                        totaluncompressedsize += uncompressedsize;
                    }
                 }

但问题仍然存在:UncompressedSize完全可靠吗?有人可以更改此信息,使其显示为一个小的未压缩大小?

2 个答案:

答案 0 :(得分:2)

不,它不是完全可靠。 zip文件中的未压缩大小肯定会被恶意源更改。您应该使用未压缩的大小来限制使用的内存,如果解压缩超过了,只需停止并拒绝zip文件。你永远不应该依赖输入来避免异常。

可以解码压缩条目并确定其未压缩的大小,而无需实际生成未压缩的输出。但是,如果你要解压缩,那就没什么意义了。解码几乎与解压缩一样长。只需开始解压缩并在达到声明的未压缩大小时停止。

答案 1 :(得分:1)

How to find uncompressed size of ionic zip file这是一个类似的问题,对您有所帮助。 基本上,您遍历每个条目并添加未压缩的大小。