C# 如何在解包前查看未压缩的大小
我使用DotNetZip来提取来自外部(不可信)源的zip文件。我的问题是zip文件本身可能有几千字节,但解压缩后的内容可能会变成PB。如何在解包前查看未压缩的大小?是否有可靠的方法可以看到这一点并防止OutOfMemoryException 如下文所述,可使用ionic zip完成: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
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以获得正确的链接。。。而且它应该是重复的(你可能还没有得到允许去建议)。嗯,这很像带着刀去枪战。你真的需要有一个大个子站在门口,阻止持枪的人进入大楼。那家伙只有知道谁要进来才能做出正确的决定。这是一个很好的回答。我将根据未压缩的大小限制字节数组长度。谢谢。