[How To] Comprimir y Descomprimir ficheros - El blog de Javier Torrecilla

[How To] Comprimir y Descomprimir ficheros

Introducción

Hoy me he percatado de la posibilidad de comprimir “un fichero” a través de .NET sin utilizar librerías de terceros".

Dentro del Namespace IO (que se encuentra dentro de System), podemos encontrar el namespace “Compression”, donde encontraremos dos clases que nos van a permitir llevar a cabo esta tarea:

  • GZipStream: Clase que va a permitir llevar a cabo la compresión o descompresión de un fichero.
  • DeflateStream: Clase que va a permitir llevar a cabo la compresión o descompresión de un fichero a través del algoritmo “Deflate”.

Este Namespace es válido desde la versión 2 de .Net Framework, pero el ejemplo que voy a utilizar sería necesario adaptarlo puesto que hago uso del método CopyTo que está disponible desde la versión 4.

Ejemplo de Uso

Para el correcto funcionamiento de los ejemplos es necesario incluir los “using” a System.IO y System.IO.Compression.

 

¿Cómo comprimir un fichero?

   1: public void ComprimirFichero(string RutaFichero)
   2:       {
   3:           using (FileStream ficheroSalida = File.Create(String.Format("{0}.zip",RutaFichero)))
   4:           {
   5:               using (GZipStream zip = new GZipStream(ficheroSalida, CompressionMode.Compress))
   6:               {
   7:                   using (FileStream ficheroEntrada = File.OpenRead(RutaFichero))
   8:                   {
   9:                       ficheroEntrada.CopyTo(zip);
  10:                   }
  11:               }
  12:           }
  13:       }

¿Cómo descomprimir un fichero comprimido?

   1: public void DescomprimirFichero(string ficheroComprimido,string rutaDestino)
   2:        {
   3:            using (FileStream ficheroSalida = File.Create( rutaDestino))
   4:            {
   5:                    using (FileStream ficheroEntrada = File.OpenRead(ficheroComprimido))
   6:                    {
   7:                        using (GZipStream zip = new GZipStream(ficheroEntrada, CompressionMode.Decompress))
   8:                        {
   9:                            zip.CopyTo(ficheroSalida);
  10:                        }
  11:                }
  12:            }
  13:        }

 

Conclusión

Es una opción muy a tener en cuenta si lo que se necesita es comprimir un único fichero, en el caso de necesitar compresión de más ficheros o de carpetas tendremos que evaluar opciones de terceros (en breve publicaré algo).

 

Published 28/9/2011 21:50 por Javier Torrecilla
Archivado en: ,,
Comparte este post:
http://geeks.ms/blogs/jtorrecilla/archive/2011/09/28/how-to-comprimir-y-descomprimir-ficheros.aspx

Comentarios

# re: [How To] Comprimir y Descomprimir ficheros

Hola Javier,

Uff yo tuve muchos problemas con algo parecido hace un tiempo.

La cosa es que GZipStream comprime genial y descomprime tambien bien, pero solo descomprime lo que hayas comprimido con GZipStream (o por decirlo de otra manera con una version de zip de aquellas que usabamos en MS-DOS) :-S

Un archivo zip normal comprimido con tu WinZip, puede tener problemillas con esta clase de .NET

Para resolver el tema, tuve que recurir al espacio de nombres java.util.zip de nuestro querido J# de .NET

msdn.microsoft.com/.../cc164129.aspx

Un saludo ;-)

Thursday, September 29, 2011 7:56 AM por Javier Conesa

# re: [How To] Comprimir y Descomprimir ficheros

Hola Javier, gracias por la opinion!

Si, por eso al final del post dejaba abierta la puerta a otro post, en mi caso utilizo una libreria de "Ionic" que si no recuerdo mal estaba basada en la que comentas.

Un saludo!

Thursday, September 29, 2011 8:16 AM por Javier Torrecilla

# [How To] Comprimir y Descomprimir Ficheros (II)

Introducción En el post anterior vimos como llevar a cabo la compresión y descompresión de un único fichero

Wednesday, October 19, 2011 4:06 PM por El blog de Javier Torrecilla