Trabalhando com arquivos ZIP em C# (.NET): guia completo

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

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                    

Recommendations