Fortschritt der Komprimierung melden

Fortschrittsereignishandler

Der Komprimierungsvorgang kann lange dauern, insbesondere wenn die Datenmenge sehr groß ist. Für ZIP-Archive gibt es ein CompressionProgressed-Ereignis, um auf dem Laufenden zu bleiben. Dieses Ereignis basiert auf ProgressEventArgs, das die Anzahl der bisher verarbeiteten Bytes enthält. So können wir dieses Event mit lambda extression abonnieren:

1   Eintrag.CompressionProgressed += (s, e) => { 
2      Console.WriteLine(string.Format("{0} Bytes komprimiert", e.ProceededBytes)); 
3   };

Zip-Fortschrittsprozentsatz melden

Jedes Mal, wenn das Ereignis „CompressionProgressed“ ausgelöst wird, dividieren wir die Zahl „ProceededBytes“ durch die Länge der Originaldatei. So finden wir derzeit das Verhältnis der komprimierten Bytes. Hier ist das vollständige Beispiel.

Schritte: Prozentsatz des Zip-Fortschritts in C# melden

  1. Öffnen Sie die Datei riesig.bin im Lesemodus mit File.Open, um sie für die Komprimierung vorzubereiten.
  2. Initialisieren Sie eine neue Instanz der Archive-Klasse und geben Sie PPMdCompressionSettings für die Komprimierung an.
  3. Erstellen Sie mit der Methode „CreateEntry“ einen Archiveintrag für die Datei „big.bin“ und verknüpfen Sie ihn mit dem Quelldateistream.
  4. Hängen Sie einen Ereignishandler an das Ereignis „CompressionProgressed“ an, um den Fortschritt der Komprimierung zu überwachen. Es berechnet den Prozentsatz der bisher komprimierten Datei.
  5. Aktualisieren Sie im Ereignishandler den Komprimierungsprozentsatz und zeigen Sie ihn in der Konsole an, wenn der Fortschritt zunimmt.
  6. Sobald die Komprimierung abgeschlossen ist, speichern Sie das Archiv in der angegebenen ZIP-Datei.
 1   using (FileStream source = File.Open("huge.bin", FileMode.Open, FileAccess.Read))
 2   {
 3      using (var archive = new Archive(new ArchiveEntrySettings(new PPMdCompressionSettings())))
 4      {
 5         ArchiveEntry-Eintrag = archive.CreateEntry("huge.bin", source);
 6         int percentReady = 0;
 7         Eintrag.CompressionProgressed += (s, e) =>
 8               {
 9                  int Prozent = (int)((100 * (long)e.ProceededBytes) / source.Length);
10                  if (Prozent >centReady)                 
11                  {
12                        Console.WriteLine(string.Format("{0}% komprimiert", Prozent));
13                        prozentReady = prozent;
14                  }       
15               };
16         archive.Save(zipFile);
17      }
18   }

Meldung des 7z-Fortschrittsprozentsatzes

Ein ähnlicher Ansatz gilt für das 7z-Archiv. Sein Eintrag hat ein eigenes CompressionProgressed-Ereignis

Schritte: Überwachen des Komprimierungsfortschritts mit LZMA2 in einem 7z-Archiv in C#

  1. Öffnen Sie die Quelldatei (huge.bin) im Lesemodus.
  2. Erstellen Sie ein SevenZipArchive-Objekt mit den LZMA2-Komprimierungseinstellungen.
  3. Fügen Sie die Quelldatei mithilfe der Methode „CreateEntry“ als Eintrag zum Archiv hinzu.
  4. Abonnieren Sie das Ereignis „CompressionProgressed“, um den Komprimierungsfortschritt zu verfolgen und zu berechnen.
  5. Berechnen Sie für jede Fortschrittsaktualisierung den Prozentsatz der abgeschlossenen Komprimierung.
  6. Speichern Sie das Archiv am angegebenen Ziel (zipFile).
 1using (FileStream source = File.Open("huge.bin", FileMode.Open, FileAccess.Read))
 2   {                
 3      using (var archive = new SevenZipArchive(new SevenZipEntrySettings(new SevenZipLZMA2CompressionSettings())))
 4      {
 5         SevenZipArchiveEntry-Eintrag = archive.CreateEntry("huge.bin", source);
 6         int percentReady = 0;
 7         Eintrag.CompressionProgressed += Delegate (Objekt s, ProgressEventArgs e) 
 8         {
 9               // s ist SevenZipArchiveEntry
10               int Prozent = (int)((100 * (long)e.ProceededBytes) / source.Length);
11               if (Prozent >centReady)
12               {                               
13                  prozentReady = prozent;      
14               }
15         };
16         archive.Save(zipFile);
17      }
18   }
Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.