首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DotNetZip ExtractProgress错误?

DotNetZip ExtractProgress错误?
EN

Stack Overflow用户
提问于 2011-05-24 18:59:44
回答 1查看 2.1K关注 0票数 7

ExtractProgressEventArgs.EntriesTotalExtractProgressEventArgs.EntriesExtracted始终为零。这是一个已知的bug吗?请看下面的代码:

代码语言:javascript
复制
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));
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-05-25 03:02:42

它是定义好的行为:

来自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不能给你提供关于你做了多少的可靠信息。

您可以使用两种简单的解决方法:

Extract

  • 使用一个整型计数器,在循环中每次调用()时都会递增该计数器。
  • 调用ExtractAll(),在这种情况下,它将发出ExtractProgressEvents,并将EntriesExtracted值设置为一个有意义的数字。

选项1:

代码语言:javascript
复制
    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:

代码语言:javascript
复制
    using(ZipFile zip = ZipFile.Read(zipFile))
    {                
        zip.ExtractProgress += zip_ExtractProgress;
        zip.ExtractAll(destination,
               ExtractExistingFileAction.OverwriteSilently);                    
        Console.WriteLine("DONE");
    }
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6109370

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档