2015-12-16 52 views
0

我有下面的代碼爲單個文件zip工作,沒有任何問題。但是當我從一個目錄中壓縮(創建)時,進度條變得很糟糕。目錄上的C#DotNetZip進度條

基本上,進度條可以不停地前後移動。圖像說明。 enter image description here

在選定的文件夾內,我可能會有另外10個子文件夾。

using (ZipFile zip = new ZipFile()) 
{ 
    zip.CompressionLevel = Ionic.Zlib.CompressionLevel.BestCompression; 
    zip.SaveProgress += zipProgress; 

    zip.AddDirectory(folderPath); 
    zip.Save(tempPath); 
} 

private void zipProgress(object sender, SaveProgressEventArgs e) 
{ 
    if (e.EventType == ZipProgressEventType.Saving_EntryBytesRead) 
     this.progressbar1.Value = (int)((e.BytesTransferred * 100)/e.TotalBytesToTransfer); 

    else if (e.EventType == ZipProgressEventType.Saving_Completed) 
     this.progressbar1.Value = 100; 
} 

我也知道進度值的事實,不斷前進,後是由於這樣的事實,我拉拉鍊,包含10個子文件夾,一個文件夾。

但是我想知道是否有任何方法正確顯示文件夾壓縮的進度條?

+0

查看AddProgress事件的文檔:http://dotnetzip.herobo.com/DNZHelp/html/842e7449-867a-2bed-dac5-4b7ac456d2ed.htm。 SaveProgress報告添加到zip的每個條目的進度 – sotn0r

回答

2

大廈@Shazi answer,一種解決方案是依賴於具有寫入每個之後會發生類型Saving_AfterWriteEntry事件進入這樣的:

if(e.EventType == ZipProgressEventType.Saving_AfterWriteEntry) 
{ 
    this.progressbar1.Value = e.EntriesSaved * 100/e.EntriesTotal; 
} 

這樣的解決方案的問題在於,它把大文件的小文件,因此進度條會在不同的時間(具體取決於文件大小之間的差)進展速度不同。

3

這是因爲「e.BytesTransferred」是傳輸的字節數每個條目不是總數。

Check out the docs

「的字節數讀取或寫入到目前爲止這個項目。」

作出確切的同樣的錯誤我自己:)(雖然我是用它來解壓縮文件)