Leer y escribir archivos ZIP en C#

Introducción

¿Alguna vez has querido comprimir archivos desde tu código como si fueras un ninja del software? ¿O abrir un .zip sin tener que cliquearlo como usuario promedio? Bueno, DotNetZip es ese compita fiel que te ayuda con todo eso… y más. Vamos al grano, que el tiempo es oro (y el espacio en disco también 💾).

1. ¿Qué rayos es DotNetZip y por qué debería importarme?

DotNetZip es una librería open source para .NET que te permite manipular archivos ZIP como si fueran pan caliente. Comprimir, descomprimir, listar, proteger con contraseña… todo eso desde C#, sin dramas, sin DLLs raras, y sin invocar a WinRAR desde la línea de comandos (sí, eso pasaba antes… era oscuro).

2. Instalando DotNetZip sin llorar

Nada de complicaciones. Solo abre tu consola de NuGet y lanza esto como un hechizo mágico:

Install-Package DotNetZip

¿Usas .NET Core? Te recomiendo usar alternativas más modernas como System.IO.Compression, pero para proyectos clásicos (o legacy como le dicen los que cobran más), DotNetZip sigue funcionando.

3. 📦 Crear un archivo ZIP como un pro

Aquí viene la magia. Crear un .zip desde tu código es más fácil que pedir delivery:

using (ZipFile zip = new ZipFile())
{
    zip.AddFile("documento.txt");
    zip.AddDirectory("MiCarpeta/");
    zip.Save("resultado.zip");
}

Agregar archivos individuales

Solo necesitas el nombre del archivo y ¡pum! Dentro del ZIP.

Comprimir carpetas enteras

¿Tienes una carpeta con mil memes? También puedes meterla entera.

Opciones de compresión

zip.CompressionLevel = Ionic.Zlib.CompressionLevel.BestCompression;

¿Quieres velocidad? Usa BestSpeed. ¿Quieres ahorro de espacio? BestCompression. ¿Te da igual? Default.

4. 🔍 Leyendo un ZIP sin abrir la caja de Pandora

Listar contenido sin descomprimir

using (ZipFile zip = ZipFile.Read("archivo.zip"))
{
    foreach (ZipEntry e in zip)
    {
        Console.WriteLine("Archivo: " + e.FileName);
    }
}

Extraer archivos específicos

zip["documento.txt"].Extract("Destino/");

Descomprimir todo

zip.ExtractAll("Destino/", ExtractExistingFileAction.OverwriteSilently);

Sí, puedes descomprimir todo sin que te pregunte “¿Deseas reemplazar este archivo?”. Amamos eso 😍

5. 💣 Errores comunes que te harán querer lanzar tu teclado

  • Ruta de archivos no válida
  • Archivos bloqueados por otro proceso (¡grrr!)
  • Problemas con permisos de escritura
  • ZIP corruptos (porque alguien lo editó con un editor hexadecimal, claro)

Pro tip: Siempre pon un try-catch… nadie quiere ver caer su app por un ZIP malo.

6. 🧪 Ejemplos de código que realmente funcionan (sí, de verdad)

👉 ¿Quieres ver todo junto?

using (ZipFile zip = new ZipFile())
{
    zip.AddFile("ejemplo.txt");
    zip.Save("ejemplo.zip");
}

using (ZipFile zip = ZipFile.Read("ejemplo.zip"))
{
    zip.ExtractAll("Destino/", ExtractExistingFileAction.OverwriteSilently);
}

Copiar, pegar, correr. ¡Boom! Ya eres un compresor profesional.

7. 🔥 Consejitos ninja para sacarle el jugo a DotNetZip

  • Usa rutas relativas para evitar errores raros.
  • Siempre verifica si el archivo ya existe antes de guardar.
  • Maneja excepciones con amor ❤️.
  • Agrega logs para saber qué demonios pasó si algo falla.

8. 🎁 Bonus: Cómo proteger tu ZIP con contraseña

Porque todos tenemos cosas que no queremos que vean (como ese Excel de gastos 😅):

zip.Password = "SuperSecreta123";
zip.Encryption = EncryptionAlgorithm.WinZipAes256;
zip.Save("secreto.zip");

No, no pongas “1234” o “password”… no seas ese tipo.

9. 🤯 ¿Alternativas a DotNetZip? Spoiler: sí, pero…

  • System.IO.Compression (más moderno, pero menos amigable)
  • SharpZipLib
  • 7-Zip via comandos (para masoquistas)
  • ZipArchive en .NET Core (decente pero básico)

DotNetZip sigue siendo rey en facilidad de uso, sobre todo en proyectos legacy.

10. 📚 Recursos extra para los curiosos (o los masoquistas)

¿Y ahora qué?

¡Pues a comprimir se ha dicho! 🎉 Ya no tienes excusas para no automatizar tareas de compresión. ¿Te gustó? Compártelo, déjame un comentario, o mándame un ZIP con tus dudas (ok, no tanto).

Deja un comentario