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.

Importando a DLL

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.