[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).

 

3 comentarios en “[How To] Comprimir y Descomprimir ficheros”

  1. 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

    http://msdn.microsoft.com/en-us/magazine/cc164129.aspx

    Un saludo 😉

  2. 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!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *