DotNetZip ExtractProgress错误?

ExtractProgressEventArgs.EntriesTotalExtractProgressEventArgs.EntriesExtracted始终为零。 这是一个已知的错误? 看到我的代码如下:

public static void UnZip(string zipFile, string destination)
{
    using(ZipFile zip = ZipFile.Read(zipFile))
    {                
        zip.ExtractProgress += new EventHandler<ExtractProgressEventArgs>(zip_ExtractProgress);

        foreach (ZipEntry entry in zip)
        {
            entry.Extract(destination, ExtractExistingFileAction.OverwriteSilently);                    
        }
        Console.WriteLine("DONE");
    }
}

static void zip_ExtractProgress(object sender, ExtractProgressEventArgs e)
{
    if(e.EventType == ZipProgressEventType.Extracting_AfterExtractEntry)
        Console.WriteLine(String.Format("{0} : {1} / {2} = {3}%", e.CurrentEntry.FileName, e.EntriesTotal, e.EntriesExtracted, ((double)e.EntriesTotal / (double)e.EntriesExtracted) * 100.00));
}

它的定义行为:

来自http://cheeso.members.winisp.net/DotNetZipHelp/html/91d797c7-efff-99a3-2b14-6c9a9797b324.htm

EntriesExtracted目前提取的条目数。 这仅在EventType为Extracting_BeforeExtractEntry或Extracting_AfterExtractEntry时设置,并且Extract()在对ExtractAll()的调用范围内发生。

原因很简单:如果您在自己控制的循环中调用Extract(),图书馆无法知道您打算多少次调用它,连续调用了多少次,是否在接下来的5次中计数前5次,依此类推。 所以DotNetZip无法为您提供有关您完成了多少次的可靠信息。

您有两个简单的解决方法可用:

  • 使用int计数器,您可以为循环中的每个对Extract()的调用增加一个计数器。

  • 调用ExtractAll(),在这种情况下,它将发出ExtractProgressEvents并将EntriesExtracted值设置为一个有意义的数字。

  • 选项1:

        int n;
        using(ZipFile zip = ZipFile.Read(zipFile))
        {                
            zip.ExtractProgress += zip_ExtractProgress;
            n = 0;
            foreach (ZipEntry entry in zip)
            {
                n++;
                entry.Extract(destination, ExtractExistingFileAction.OverwriteSilently);                    
            }
            Console.WriteLine("DONE");
        }
    

    选项2:

        using(ZipFile zip = ZipFile.Read(zipFile))
        {                
            zip.ExtractProgress += zip_ExtractProgress;
            zip.ExtractAll(destination,
                   ExtractExistingFileAction.OverwriteSilently);                    
            Console.WriteLine("DONE");
        }
    
    链接地址: http://www.djcxy.com/p/52847.html

    上一篇: DotNetZip ExtractProgress Bug?

    下一篇: glDrawArrays vs glDrawElements