Signaler la progression de la compression
Gestionnaire d’événements de progression
Le processus de compression peut prendre beaucoup de temps, surtout si la taille des données est énorme. Pour l’archive zip, il existe un événement CompressionProgressed pour rester publié. Cet événement s’appuie sur ProgressEventArgs qui contient le nombre d’octets traités jusqu’à présent. Voici comment nous pouvons nous abonner à cet événement en utilisant lambda extression :
1 Entry.CompressionProgressed += (s, e) => {
2 Console.WriteLine(string.Format("{0} octets compressés", e.ProceededBytes));
3 } ;
** Rapport du pourcentage de progression Zip **
Chaque fois que l’événement CompressionProgressed
se déclenche, nous divisons le nombre ProceededBytes
par la longueur du fichier d’origine. C’est ainsi que nous trouvons le ratio d’octets compressés pour le moment. Voici l’échantillon complet.
Étapes : Signaler le pourcentage de progression du zip en C#
- Ouvrez le fichier huge.bin en mode lecture à l’aide de File.Open pour le préparer à la compression.
- Initialisez une nouvelle instance de la classe Archive, en spécifiant PPMdCompressionSettings pour la compression.
- Créez une entrée d’archive pour le fichier huge.bin à l’aide de la méthode CreateEntry, en la liant au flux du fichier source.
- Attachez un gestionnaire d’événements à l’événement CompressionProgressed pour surveiller la progression de la compression. Il calcule le pourcentage du fichier compressé jusqu’à présent.
- Dans le gestionnaire d’événements, mettez à jour le pourcentage de compression et affichez-le dans la console chaque fois que la progression augmente.
- Une fois la compression terminée, enregistrez l’archive dans le fichier zip spécifié.
1 en utilisant (source FileStream = File.Open("huge.bin", FileMode.Open, FileAccess.Read))
2 {
3 en utilisant (var archive = new Archive (new ArchiveEntrySettings (new PPMdCompressionSettings())))
4 {
5 Entrée ArchiveEntry = archive.CreateEntry("huge.bin", source);
6 int pourcentagePrêt = 0 ;
7 entrée.CompressionProgressed += (s, e) =>
8 {
9 int percent = (int)((100 * (long)e.ProceededBytes) / source.Length);
10 si (pourcentage > pourcentagePrêt)
11 {
12 Console.WriteLine(string.Format("{0}% compressé", pourcentage));
13 percentReady = pourcentage ;
14 }
15 } ;
16 archive.Save(zipFile);
17 }
18 }
** Déclaration du pourcentage de progression de 7 z **
Une approche similaire concerne les archives 7z. Son entrée possède son propre événement CompressionProgressed
- Ouvrez le fichier source (huge.bin) en mode lecture.
- Créez un objet SevenZipArchive à l’aide des paramètres de compression LZMA2.
- Ajoutez le fichier source à l’archive en tant qu’entrée à l’aide de la méthode CreateEntry.
- Abonnez-vous à l’événement CompressionProgressed pour suivre et calculer la progression de la compression.
- Pour chaque mise à jour de progression, calculez le pourcentage de compression terminé.
- Enregistrez l’archive dans la destination spécifiée (zipFile).
1en utilisant (source FileStream = File.Open("huge.bin", FileMode.Open, FileAccess.Read))
2 {
3 en utilisant (var archive = new SevenZipArchive(new SevenZipEntrySettings(new SevenZipLZMA2CompressionSettings())))
4 {
5 Entrée SevenZipArchiveEntry = archive.CreateEntry("huge.bin", source);
6 int pourcentagePrêt = 0 ;
7 Entry.CompressionProgressed += délégué (object s, ProgressEventArgs e)
8 {
9 // s est SevenZipArchiveEntry
10 int percent = (int)((100 * (long)e.ProceededBytes) / source.Length);
11 si (pourcentage > pourcentagePrêt)
12 {
13 percentReady = pourcentage ;
14 }
15 } ;
16 archive.Save(zipFile);
17 }
18 }