如何找到Ionic ZIP文件的未压缩大小

4

我有一个使用Ionic zip压缩的zip文件。在解压之前,我需要验证可用磁盘空间。但是如何事先找出未压缩的大小呢?在Ionic创建的zip文件中是否有任何头信息,以便我可以读取它?

2个回答

10
这应该能解决问题:
选项1
static long totaluncompressedsize;
    static string info;

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

或者,选项2 - 需要筛选大量的信息。

using (ZipFile zip = ZipFile.Read(zipFile)) {
        info = zip.Info;
}

谢谢,它起作用了。速度也相当快。但我在想是否有比迭代每个条目更快的方法。 - nawfal
1
你可以检查zip.Info属性,但这样做需要同样长的时间,并返回一堆有用(?)的信息。 - Taniq
是的,你说得对,访问info属性真是一团糟。 - nawfal
是的。我认为选项1是你所需的最佳选择。即使压缩文件很大,它也不会带来太大的负担。 - Taniq
4
两件事情:#1 - 遍历每个条目就像这个答案所说的那样是正确的方法。它不涉及对 zip 文件的完全扫描。Zip 在“中央目录”中包含每个条目的元数据,当进行迭代时,您只是在遍历从该元数据创建的对象列表。速度很快。#2. ZipFile.Info 属性也可以做同样的事情(遍历条目),并将输出格式化为字符串。 - Cheeso

3
public static long GetTotalUnzippedSize(string zipFileName)
{
    using (ZipArchive zipFile = ZipFile.OpenRead(zipFileName))
    {
        return zipFile.Entries.Sum(entry => entry.Length);
    }
}

你能告诉我们这个的优点在哪里,或它与之前的答案有何不同吗? - nawfal
1
至少,这个版本编译并且正常工作 :) - Crulex

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接