Informar del progreso de la compresión
Controlador de eventos de progreso
El proceso de compresión puede llevar mucho tiempo, especialmente si el tamaño de los datos es enorme. Para el archivo zip, hay un eventoCompressionProgressed que debe permanecer publicado. Este evento se basa en ProgressEventArgs que contiene el número de bytes avanzados hasta el momento. Así es como podemos suscribirnos a este evento usando expresión lambda:
1 entrada.CompressionProgressed += (s, e) => {
2 Console.WriteLine(string.Format("{0} bytes comprimidos", e.ProceededBytes));
3 };
Porcentaje de progreso del código postal de informes
Cada vez que aparece el evento CompressionProgressed
, dividimos el número de ProceededBytes
por la longitud del archivo original. Así encontramos la proporción de bytes comprimidos en este momento. Aquí está la muestra completa.
Pasos: Informe del porcentaje de progreso de Zip en C#
- Abra el archivo enorme.bin en modo lectura usando File.Open para prepararlo para la compresión.
- Inicialice una nueva instancia de la clase Archive, especificando PPMdCompressionSettings para la compresión.
- Cree una entrada de archivo para el archivo enorme.bin usando el método CreateEntry, vinculándolo a la secuencia del archivo fuente.
- Adjunte un controlador de eventos al evento CompressionProgressed para monitorear el progreso de la compresión. Calcula el porcentaje del archivo comprimido hasta el momento.
- Dentro del controlador de eventos, actualice el porcentaje de compresión y muéstrelo en la consola cada vez que aumente el progreso.
- Una vez que se complete la compresión, guarde el archivo en el archivo zip especificado.
1 usando (FileStream fuente = File.Open("huge.bin", FileMode.Open, FileAccess.Read))
2 {
3 usando (archivo var = nuevo archivo (nuevo ArchiveEntrySettings (nuevo PPMdCompressionSettings())))
4 {
5 Entrada ArchiveEntry = archive.CreateEntry("huge.bin", fuente);
6 int porcentajeListo = 0;
7 entrada.CompressionProgressed += (s, e) =>
8 {
9 int porcentaje = (int)((100 * (long)e.ProceededBytes) / source.Length);
10 si (porcentaje > porcentajeListo)
11 {
12 Console.WriteLine(string.Format("{0}% comprimido", porcentaje));
13 porcentajeListo = porcentaje;
14 }
15 };
16 archivo.Guardar(zipFile);
17 }
18 }
Informe de porcentaje de progreso de 7z
Un enfoque similar es para el archivo 7z. Su entrada tiene su propio eventoCompressionProgressed
Pasos: Monitoreo del progreso de la compresión con LZMA2 en un archivo 7z en C#</ un>
- Abra el archivo fuente (huge.bin) en modo lectura.
- Cree un objeto SevenZipArchive utilizando la configuración de compresión LZMA2.
- Agregue el archivo fuente al archivo como una entrada usando el método CreateEntry.
- Suscríbase al evento CompressionProgressed para realizar un seguimiento y calcular el progreso de la compresión.
- Para cada actualización de progreso, calcule el porcentaje de compresión completada.
- Guarde el archivo en el destino especificado (zipFile).
1usando (FileStream fuente = File.Open("huge.bin", FileMode.Open, FileAccess.Read))
2 {
3 usando (var archive = new SevenZipArchive(new SevenZipEntrySettings(new SevenZipLZMA2CompressionSettings())))
4 {
5 Entrada SevenZipArchiveEntry = archive.CreateEntry("huge.bin", fuente);
6 int porcentajeListo = 0;
7 entrada.CompressionProgressed += delegado (objeto s, ProgressEventArgs e)
8 {
9 // s es SevenZipArchiveEntry
10 int porcentaje = (int)((100 * (long)e.ProceededBytes) / source.Length);
11 si (porcentaje > porcentajeListo)
12 {
13 porcentajeListo = porcentaje;
14 }
15 };
16 archivo.Guardar(zipFile);
17 }
18 }