Trabalho 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

Trabalho com arquivos ZIP em C# (.NET)



No desenvolvimento moderno na plataforma .NET, trabalhar com arquivos é uma das tarefas mais comuns. Seja para empacotar logs, criar backups ou transferir dados pela rede — saber compactar e descompactar arquivos de forma eficiente é essencial para todo desenvolvedor C#. Neste artigo, abordaremos detalhadamente duas abordagens principais: o namespace nativo System.IO.Compression e a biblioteca de terceiros SharpZipLib.



Ferramentas nativas do .NET: System.IO.Compression



A partir do .NET Framework 4.5, a plataforma oferece uma API nativa para trabalhar com arquivos ZIP. As principais classes estão no namespace System.IO.Compression.



Criação de um arquivo ZIP



Para criar um arquivo, use a classe ZipArchive em conjunto com 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("Arquivo criado: " + zipPath);


Extração do arquivo



A descompactação é feita de forma semelhante — com o método ExtractToDirectory:



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


Trabalhando com entradas individuais



Para um controle mais preciso, use ZipArchive diretamente:



using (FileStream zipStream = new FileStream(zipPath, FileMode.Open))using (ZipArchive archive = new ZipArchive(zipStream, ZipArchiveMode.Read)){    foreach (ZipArchiveEntry entry in archive.Entries)    {        Console.WriteLine($"Arquivo: {entry.FullName}, Tamanho: {entry.Length} bytes");                // Extrair um arquivo específico        entry.ExtractToFile(Path.Combine(extractPath, entry.FullName), true);    }}


Biblioteca SharpZipLib



SharpZipLib é uma poderosa biblioteca de código aberto de terceiros que oferece recursos avançados em comparação com as ferramentas nativas. Ela suporta mais formatos (GZip, BZip2, Tar) e fornece um controle mais flexível sobre o processo de compressão.



Instalação do SharpZipLib



Instale a biblioteca através do NuGet Package Manager:



Install-Package SharpZipLib


Ou via .NET CLI:



dotnet add package SharpZipLib


Criação de arquivo com 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); // Compressão 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(); }}


Extração de arquivo com 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