Trabalhando com arquivos ZIP em C# (.NET): criação, leitura e gerenciamento
Em aplicações modernas, frequentemente surge a necessidade de compactar arquivos para economizar espaço ou facilitar a transferência. A plataforma .NET fornece ferramentas poderosas e convenientes para trabalhar com arquivos ZIP diretamente. Usando o namespace System.IO.Compression, você pode criar, extrair e modificar arquivos facilmente sem instalar bibliotecas de terceiros. Neste artigo, abordaremos detalhadamente todas as operações principais.
Incluindo os namespaces necessários
Para começar, certifique-se de que as seguintes diretivas foram adicionadas ao seu projeto:
using System;using System.IO;using System.IO.Compression;using System.Linq;Criando um arquivo ZIP
A maneira mais simples de criar um arquivo é usar a classe ZipFile. Ela está disponível a partir do .NET Framework 4.5 e .NET Core.
Criando um arquivo a partir de uma única pasta
string sourceDirectory = @"C:\\MyDocuments";string zipFilePath = @"C:\\MyArchive.zip";
// Cria um arquivo a partir de todos os arquivos na pasta especificadaZipFile.CreateFromDirectory(sourceDirectory, zipFilePath);Console.WriteLine("Arquivo criado: " + zipFilePath);Criando um arquivo com parâmetros adicionais
Você pode especificar o nível de compressão e adicionar um prefixo de caminho dentro do arquivo:
string sourceDir = @"C:\\Data";string outputZip = @"C:\\Data.zip";
// CompressionLevel.Optimal - compressão máxima// includeBaseDirectory: true - preserva a estrutura de pastasZipFile.CreateFromDirectory( sourceDir, outputZip, CompressionLevel.Optimal, includeBaseDirectory: true);Console.WriteLine("Arquivo criado com otimização.");Extraindo arquivos de um arquivo ZIP
Descompactando todo o arquivo em uma pasta
string zipPath = @"C:\\MyArchive.zip";string extractPath = @"C:\\ExtractedFiles";
// Descompacta todo o conteúdoZipFile.ExtractToDirectory(zipPath, extractPath);Console.WriteLine("Arquivo descompactado com sucesso.");Descompactando com substituição de arquivos existentes
// No .NET 6+ você pode especificar a substituiçãoZipFile.ExtractToDirectory(zipPath, extractPath, overwriteFiles: true);Trabalhando com entradas individuais no arquivo
A classe ZipArchive oferece controle total sobre o conteúdo do arquivo.
Lendo a lista de arquivos no arquivo
using (ZipArchive archive = ZipFile.OpenRead(@"C:\\Archive.zip")){ foreach (ZipArchiveEntry entry in archive.Entries) { Console.WriteLine($"Arquivo: {entry.FullName}, Tamanho: {entry.Length} bytes"); }}Extraindo um arquivo específico do arquivo
string zipFilePath = @"C:\\Archive.zip";string entryName = @"folder\\document.txt"; // caminho dentro do arquivostring outputPath = @"C:\\Output\\document.txt";
using (ZipArchive archive = ZipFile.OpenRead(zipFilePath)){ ZipArchiveEntry entry = archive.GetEntry(entryName); if (entry != null) { // Extrai o arquivo entry.ExtractToFile(outputPath, overwrite: true); Console.WriteLine($"Arquivo '{entryName}' extraído."); } else { Console.WriteLine("Arquivo não encontrado no arquivo ZIP."); }}Adicionando e removendo arquivos de um arquivo ZIP existente
Para modificar um arquivo existente, abra-o no modo ZipArchiveMode.Update:
Adicionando um novo arquivo ao arquivo
string existingZip = @"C:\\Archive.zip";string fileToAdd = @"C:\\NewFile.txt";
using (ZipArchive archive = ZipFile.Open(existingZip, ZipArchiveMode.Update)){ // Adiciona o arquivo com o nome "NewFile.txt" na raiz do arquivo archive.CreateEntryFromFile(fileToAdd, "NewFile.txt"); Console.WriteLine("Arquivo adicionado ao arquivo ZIP.");}Removendo um arquivo do arquivo
using (ZipArchive archive Também na biblioteca
Trabalhando com Apache Kafka em Go (Golang): bibliotecas e exemplos
Geolocalização e Mapas em JavaScript (Node.js): bibliotecas e ferramentas
Guia completo de Symfony/Cache para PHP com exemplos práticos