2011-05-24 12 views
7

ExtractProgressEventArgs.EntriesTotal और ExtractProgressEventArgs.EntriesExtracted हमेशा शून्य है। क्या यह कोई ज्ञात त्रुटि है?DotNetZip निकालें प्रगति बग?

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)); 
} 
+0

क्यों पुस्तकालय स्रोत डाउनलोड करने और एक डिबग सत्र भी नहीं? – Jaapjan

+0

अच्छा बिंदु। खैर, अगर यह एक पुष्टि की गई बग है, तो मुझे इसे ठीक करने में कोई फर्क नहीं पड़ता। :) – Ian

उत्तर

4

यह निर्धारित किया है व्यवहार:

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

EntriesExtracted अब तक निकाले गई प्रविष्टियों की संख्या नीचे मेरी कोड देखें। यह केवल तभी सेट किया जाता है जब EventType Extracting_BeforeExtractEntry या Extracting_AfterExtractEntry है, और निकालें() एक्स्ट्रेक्टएल() को कॉल के दायरे को समझने वाला होता है।

इसका कारण सरल है: यदि आप अपने आप को नियंत्रित करने वाले लूप में निकालें() कहते हैं, तो लाइब्रेरी को यह जानने का कोई तरीका नहीं है कि आप इसे कितनी बार कॉल करने की योजना बना रहे हैं, आपने कितनी बार इसे एक पंक्ति में बुलाया, चाहे अगले 5 बार पहले 5 बार गिनें, और इसी तरह। तो डॉटनेटजिप आपको कितने काम करने के बारे में विश्वसनीय जानकारी नहीं दे सकता है।

आप दो आसान समाधान उपलब्ध:

  • उपयोग किसी पूर्णांक काउंटर है कि आप प्रत्येक कॉल निकालें करने के लिए बढ़ाने के() अपने पाश में।

  • कॉल एक्स्ट्रैक्टअल(), उस स्थिति में यह EntriesExtracted वैल्यू को सार्थक संख्या में सेट के साथ ExtractProgressEvents जारी करेगा।

विकल्प 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"); 
    } 
संबंधित मुद्दे