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 }