Muitas vezes precisamos criar ou ler arquivos ZIP em aplicações .NET para compactar ou extrair um diretório completo. Utilizando algumas bibliotecas de terceiros, a saída muitas vezes é inserir ou extrair um a um os arquivo do/para o diretório.
No .NET Framework 4.5 essa tarefa se tornou bastante simples, basta usar a classe ZipFile do namespace System.IO.Compreesion e seus métodos estáticos CreateFromDirectory e ExtractToDirectory.
Para utilizar essa class, o primeiro passo é importar a DLL System.IO.Compression.FileSystem, clicando com a direita na pasta References, no Solution Explorer, e em Add Reference. Na categoria Assemblies>Framework, é só selecionar a DLL e clicar em OK, conforme a Figura 1.
Figura 1: Importando a DLL
Em seguida, já no código, é preciso importar o namespace System.IO.Compression na seção using (Listagem 1).
Listagem 1: Importando o namespace
using System.IO.Compression;
Pronto, agora já se pode utilizar a classe ZipFile para compactar um diretório para um arquivo ZIP ou extrair um arquivo ZIP para um diretório, de acordo com as Listagens 2 e 3 a seguir.
Listagem 2: Compactando um diretório
string diretorio = @"D:\Minha Pasta";//Caminho do diretório
string arquivo = @"D:\MinhaPasta.zip";//Caminho do arquivo zip a ser criado
ZipFile.CreateFromDirectory(diretorio, arquivo);
Listagem 3: Extraindo um diretório
string diretorio = @"D:\Minha Pasta";//Caminho do diretório a ser criado
string arquivo = @"D:\MinhaPasta.zip";//Caminho do arquivo zip a ser extraído
ZipFile.ExtractToDirectory(arquivo, diretorio);
O método CreateFromDirectory possui ainda uma sobrecarga que recebe dois parâmetros adicionais:
- compressionLevel: nível de compressão, que pode ser Fastest, NoCompression e Optimal (valores do enum CompressionLevel).
- includeBaseDirectory: booleano que indica se a pasta em si será incluída no ZIP ou apenas seus arquivos.
Por hoje é só. Uma dica rápida, mas que pode se mostrar bastante útil no dia a dia de quem trabalha com compressão de arquivos nas aplicações.