Trabajo con archivos ZIP en C# (.NET): guía completa

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Trabajo con archivos ZIP en C# (.NET)



En el desarrollo moderno en la plataforma .NET, trabajar con archivos comprimidos es una de las tareas más comunes. Ya sea para empaquetar registros, crear copias de seguridad o transferir datos a través de la red, la capacidad de comprimir y descomprimir archivos de manera eficiente es esencial para todo desarrollador de C#. En este artículo, analizaremos en detalle dos enfoques principales: el espacio de nombres integrado System.IO.Compression y la biblioteca de terceros SharpZipLib.



Herramientas integradas de .NET: System.IO.Compression



A partir de .NET Framework 4.5, la plataforma proporciona una API nativa para trabajar con archivos ZIP. Las clases principales se encuentran en el espacio de nombres System.IO.Compression.



Creación de un archivo ZIP



Para crear un archivo comprimido, se utiliza la clase ZipArchive junto con ZipFile:



using System.IO;using System.IO.Compression;

string sourceDirectory = @"C:\\Data\\Reports";string zipPath = @"C:\\Archives\\reports.zip";

if (File.Exists(zipPath)) File.Delete(zipPath);

ZipFile.CreateFromDirectory(sourceDirectory, zipPath);Console.WriteLine("Archivo comprimido creado: " + zipPath);


Extracción de un archivo ZIP



La descompresión se realiza de manera similar, con el método ExtractToDirectory:



string extractPath = @"C:\\Data\\Extracted";ZipFile.ExtractToDirectory(zipPath, extractPath);Console.WriteLine("Archivo extraído en: " + extractPath);


Trabajo con entradas individuales



Para un control más preciso, utilice ZipArchive directamente:



using (FileStream zipStream = new FileStream(zipPath, FileMode.Open))using (ZipArchive archive = new ZipArchive(zipStream, ZipArchiveMode.Read)){    foreach (ZipArchiveEntry entry in archive.Entries)    {        Console.WriteLine($"Archivo: {entry.FullName}, Tamaño: {entry.Length} bytes");                // Extraer un archivo específico        entry.ExtractToFile(Path.Combine(extractPath, entry.FullName), true);    }}


Biblioteca SharpZipLib



SharpZipLib es una potente biblioteca de terceros de código abierto que ofrece funcionalidades avanzadas en comparación con las herramientas integradas. Soporta más formatos (GZip, BZip2, Tar) y proporciona un control más flexible sobre el proceso de compresión.



Instalación de SharpZipLib



Instale la biblioteca a través del Administrador de paquetes NuGet:



Install-Package SharpZipLib


O mediante .NET CLI:



dotnet add package SharpZipLib


Creación de un archivo ZIP con SharpZipLib



using ICSharpCode.SharpZipLib.Zip;using ICSharpCode.SharpZipLib.Core;

string outputZip = @"C:\\Archives\\backup.zip";string[] filesToZip = Directory.GetFiles(@"C:\\Data\\Files", "*.*", SearchOption.AllDirectories);

using (FileStream fsOut = File.Create(outputZip))using (ZipOutputStream zipStream = new ZipOutputStream(fsOut)){ zipStream.SetLevel(9); // Compresión máxima (0-9)

foreach (string filename in filesToZip) { FileInfo fi = new FileInfo(filename); string entryName = ZipEntry.CleanName(fi.Name); ZipEntry newEntry = new ZipEntry(entryName); newEntry.DateTime = fi.LastWriteTime; newEntry.Size = fi.Length;

zipStream.PutNextEntry(newEntry);

byte[] buffer = new byte[4096]; using (FileStream fsInput = File.OpenRead(filename)) { StreamUtils.Copy(fsInput, zipStream, buffer); } zipStream.CloseEntry(); }}


Extracción de un archivo ZIP con SharpZipLib



string inputZip = @"C:\\Archives\\backup.zip";string outputDir = @"C:\\Data\\Restored";

using (FileStream fsIn = File.OpenRead(inputZip))using (ZipInputStream zipStream = new ZipInputStream(fsIn)){ ZipEntry entry; while ((entry = zipStream.GetNextEntry()) !=

Recommendations