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): creación, lectura y gestión



En las aplicaciones modernas, a menudo surge la necesidad de comprimir archivos para ahorrar espacio o facilitar la transferencia. La plataforma .NET proporciona herramientas potentes y convenientes para trabajar con archivos ZIP directamente desde el inicio. Usando el espacio de nombres System.IO.Compression, puede crear, extraer y modificar archivos fácilmente sin instalar bibliotecas de terceros. En este artículo, analizaremos en detalle todas las operaciones principales.



Conexión de los espacios de nombres necesarios

Para comenzar, asegúrese de que las siguientes directivas estén agregadas en su proyecto:

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


Creación de un archivo ZIP

La forma más sencilla de crear un archivo es usar la clase ZipFile. Está disponible desde .NET Framework 4.5 y .NET Core.



Creación de un archivo a partir de una carpeta

string sourceDirectory = @"C:\\MyDocuments";string zipFilePath = @"C:\\MyArchive.zip";

// Creamos un archivo a partir de todos los archivos en la carpeta especificadaZipFile.CreateFromDirectory(sourceDirectory, zipFilePath);Console.WriteLine("Archivo creado: " + zipFilePath);


Creación de un archivo con parámetros adicionales

Puede especificar el nivel de compresión y agregar un prefijo de ruta dentro del archivo:

string sourceDir = @"C:\\Data";string outputZip = @"C:\\Data.zip";

// CompressionLevel.Optimal - compresión máxima// includeBaseDirectory: true - conservará la estructura de carpetasZipFile.CreateFromDirectory( sourceDir, outputZip, CompressionLevel.Optimal, includeBaseDirectory: true);Console.WriteLine("Archivo creado con optimización.");


Extracción de archivos de un archivo ZIP

Descompresión de todo el archivo en una carpeta

string zipPath = @"C:\\MyArchive.zip";string extractPath = @"C:\\ExtractedFiles";

// Descomprimimos todo el contenidoZipFile.ExtractToDirectory(zipPath, extractPath);Console.WriteLine("Archivo descomprimido exitosamente.");


Descompresión con sobrescritura de archivos existentes

// En .NET 6+ se puede especificar la sobrescrituraZipFile.ExtractToDirectory(zipPath, extractPath, overwriteFiles: true);


Trabajo con entradas individuales en el archivo

La clase ZipArchive brinda control total sobre el contenido del archivo.



Lectura de la lista de archivos en el archivo

using (ZipArchive archive = ZipFile.OpenRead(@"C:\\Archive.zip")){    foreach (ZipArchiveEntry entry in archive.Entries)    {        Console.WriteLine($"Archivo: {entry.FullName}, Tamaño: {entry.Length} bytes");    }}


Extracción de un archivo específico del archivo

string zipFilePath = @"C:\\Archive.zip";string entryName = @"folder\\document.txt"; // ruta dentro del archivostring outputPath = @"C:\\Output\\document.txt";

using (ZipArchive archive = ZipFile.OpenRead(zipFilePath)){ ZipArchiveEntry entry = archive.GetEntry(entryName); if (entry != null) { // Extraemos el archivo entry.ExtractToFile(outputPath, overwrite: true); Console.WriteLine($"Archivo '{entryName}' extraído."); } else { Console.WriteLine("Archivo no encontrado en el ZIP."); }}


Agregar y eliminar archivos de un archivo ZIP existente

Para modificar un archivo existente, ábralo en modo ZipArchiveMode.Update:



Agregar un nuevo archivo al ZIP

string existingZip = @"C:\\Archive.zip";string fileToAdd = @"C:\\NewFile.txt";

using (ZipArchive archive = ZipFile.Open(existingZip, ZipArchiveMode.Update)){ // Agregamos el archivo con el nombre "NewFile.txt" en la raíz del ZIP archive.CreateEntryFromFile(fileToAdd, "NewFile.txt"); Console.WriteLine("Archivo agregado al ZIP.");}


Eliminar un archivo del ZIP

using (ZipArchive archive                    

Recommendations