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 SharpZipLibOu via .NET CLI:
dotnet add package SharpZipLibCriaçã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()) != Também na biblioteca
Envio de Email em C# (.NET): biblioteca System.Net.Mail
Processamento de imagens em Kotlin: resize e crop com a biblioteca Kamel
Monitoramento de aplicações TypeScript: bibliotecas, ferramentas e configuração