Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在解包前查看未压缩的大小_C#_Vb.net_Zip_Gzip_Dotnetzip - Fatal编程技术网

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

C# 如何在解包前查看未压缩的大小,c#,vb.net,zip,gzip,dotnetzip,C#,Vb.net,Zip,Gzip,Dotnetzip,我使用DotNetZip来提取来自外部(不可信)源的zip文件。我的问题是zip文件本身可能有几千字节,但解压缩后的内容可能会变成PB。如何在解包前查看未压缩的大小?是否有可靠的方法可以看到这一点并防止OutOfMemoryException 如下文所述,可使用ionic zip完成: using (ZipFile zip = ZipFile.Read(zipFile)) { // Option 2 - will need to

我使用DotNetZip来提取来自外部(不可信)源的zip文件。我的问题是zip文件本身可能有几千字节,但解压缩后的内容可能会变成PB。如何在解包前查看未压缩的大小?是否有可靠的方法可以看到这一点并防止OutOfMemoryException

如下文所述,可使用ionic zip完成:

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;
                    }
                 }
但问题仍然存在:解压大小是否完全可靠?是否有人可以更改此信息,使其显示为较小的未压缩大小?

是一个类似的问题,可能会对您有所帮助。 基本上,您可以迭代每个条目,并将未压缩的大小加起来。

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


可以解码压缩的条目并确定其未压缩的大小,而不实际生成未压缩的输出。然而,如果你无论如何都要减压,那就没有什么意义了。解码所需时间几乎与解压缩所需时间相同。只要开始解压缩并在达到所声称的未压缩大小时停止即可。

+1以获得正确的链接。。。而且它应该是重复的(你可能还没有得到允许去建议)。嗯,这很像带着刀去枪战。你真的需要有一个大个子站在门口,阻止持枪的人进入大楼。那家伙只有知道谁要进来才能做出正确的决定。这是一个很好的回答。我将根据未压缩的大小限制字节数组长度。谢谢。