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 También en la biblioteca
Scrutor C# (.NET): guía completa con ejemplos prácticos
Registro para JavaScript (Node.js): mejores soluciones y bibliotecas
Doctrine DBAL PHP: guía completa con ejemplos prácticos