C#
-
Criando e extraindo arquivos .ZIP
![]() |
Neste artigo veremos como usar criar e extrair arquivos .zip usando a biblioteca DotNetZip via Nuget em uma aplicação Windows Forms usando a linguagem C#. |
Se você precisar compactar e descompactar arquivos na plataforma .NET pode usar os recursos do namespace Sytem.IO.Compression que contém classes que fornecem os serviços básicos para compactar e descompactar streams.
![]() |
As classes são:
DeflateStream | Fornece métodos e propriedades para compactar e descompactar streams usando o algoritmo Deflate |
GZipStream | Fornece métodos e propriedades para compactar e descompactar streams. |
Além desse recurso nativo você também pode usar bibliotecas disponíveis para realizar a mesma tarefa.
As bibliotecas mais conhecidas para realizar a criação e extração de arquivos são : DotNetZip and SharpZipLib.
A biblioteca SharpZipLib (anteriormente ZZipLib) é uma biblioteca Zip, GZip, Tar e BZip2 inteiramente escrita em C# para a plataforma .NET. Ela é implementada como um assembly(instalável no GAC), e, portanto, pode ser facilmente incorporada em outros projetos em qualquer linguagem .NET.
A DotNetZip é uma biblioteca de classes gratuita que oferece um ótimo desempenho e um conjunto de ferramentas para a manipulação de arquivos zip que pode usar usada com qualquer linguagem suportada plataforma .NET.
Neste artigo eu vou mostrar como podemos
usar a biblioteca DotNetZip para criar e extrair arquivos .zip.
Recursos usados:
Criando o projeto Windows Forms
Abra o VS Community 2013 clique em New Project;
Selecione Visual C# ->Windows Forms Application, informe o nome CriandoExtraindo_ZIP e clique no botão OK;
Vamos incluir em nosso projeto o pacote DotNetZip clicando no menu TOOLS e a seguir em Nuget Package Manager -> Manage Nuget Package for Solution;
Selecione o pacote DotNetZip e clique em Install;
No menu PROJECT clique em Add Class e informe o nome ZipZap para a classe que estamos incluindo no projeto.
Agora vamos criar dois métodos estáticos nesta classe, mas antes precisamos definir os seguintes namespaces:
using
Ionic.Zip;using
System;using
System.Collections.Generic;using
System.IO;
O namespace Ionic.Zip é o que nos dá acesso aos recursos da biblioteca DotNetZip para criar e extrair arquivos zip.
1- O método CriarArquivoZip(List<string> itens, string Arquivodestino) cujo código vemos a seguir:
public static void CriarArquivoZip(List<string> arquivos, string ArquivoDestino)
{
using (ZipFile zip = new ZipFile())
{
// percorre todos os arquivos da lista
foreach (string item in arquivos)
{
// se o item é um arquivo
if (File.Exists(item))
{
try
{
// Adiciona o arquivo na pasta raiz dentro do arquivo zip
zip.AddFile(item, "");
}
catch
{
throw;
}
}
// se o item é uma pasta
else if (Directory.Exists(item))
{
try
{
// Adiciona a pasta no arquivo zip com o nome da pasta
zip.AddDirectory(item, new DirectoryInfo(item).Name);
}
catch
{
throw;
}
}
}
// Salva o arquivo zip para o destino
try
{
zip.Save(ArquivoDestino);
}
catch
{
throw;
}
}
}
|
Este método recebe uma lista de arquivos para gerar o arquivo ZIP e o nome e local de destino do arquivo.
No código criamos uma instância da classe ZipFile e usamos os seguintes métodos:
AddFile() - que inclui um arquivo a ser zipado;
AddDirectory() - que inclui um diretório a ser zipado;
Save() - que salva o arquivo ZIP para o destino
2- O método ExtrairArquivoZip(string localizacaoArquivoZip, string destino) que possui o seguinte código:
public static void ExtrairArquivoZip(string localizacaoArquivoZip, string destino)
{
if (File.Exists(localizacaoArquivoZip))
{
//recebe a localização do arquivo zip
using (ZipFile zip = new ZipFile(localizacaoArquivoZip))
{
//verifica se o destino existe
if (Directory.Exists(destino))
{
try
{
//extrai o arquivo zip para o destino
zip.ExtractAll(destino);
}
catch
{
throw;
}
}
else
{
//lança uma exceção se o destino não existe
throw new DirectoryNotFoundException("O arquivo destino não foi localizado");
}
}
}
else
{
//lança uma exceção se a origem não existe
throw new FileNotFoundException("O Arquivo Zip não foi localizado");
}
}
|
Este método recebe o local e nome do arquivo ZIP e o local de destino para onde os arquivos deverão ser extraídos.
No código criamos uma instância da classe ZipFile() usando a sobrecarga onde passamos o nome e local do arquivo ZIP.
A seguir usamos o método ExtracAll() para extrair os arquivos do arquivo zipado.
Para testar a nossa classe vamos definir no formulário uma interface contendo um controle TabControl chamado tabControlZip que contém duas abas TabPages:
Criar Arquivo ZIP
Extrair Arquivo ZIP
Abaixo vemos o leiaute da interface mostrando as duas TabPages:
![]() |
![]() |
Eu não vou entrar em detalhes dos controles usados na interface visto que o exemplo completo poderá ser baixado no final do artigo.
1- A funcionalidade para criar um arquivo ZIP funciona assim:
O usuário deve informar o diretório de destino e a seguir informar o nome do arquivo ZIP a ser gerado.
Depois o usuário poderá selecionar os arquivos que deseja compactar no arquivo ZIP.
Após isso basta clicar no botão PROCESSAR para gerar o arquivo zip. Abaixo vemos o código do evento Click deste botão:
private void btnCriarZIP_Click(object sender, EventArgs e)
{
if (!txtNomeArquivoZIP.Text.Contains(".zip"))
{
MessageBox.Show("O nome do arquivo deve possuir a extensão .zip");
txtNomeArquivoZIP.Focus();
return;
}
try
{
string localNomeDestinoZIP = txtDestino.Text + "\\" + txtNomeArquivoZIP.Text;
ZipZap.CriarArquivoZip(arquivos, localNomeDestinoZIP);
MessageBox.Show("Os arquivos selecionados forma compactados em \n\n " +
localNomeDestinoZIP);
}
catch(Exception ex)
{
MessageBox.Show("Ocorreu um erro ao criar arquivo ZIP \n\n" + ex.Message);
}
}
|
No código estamos usando o método CriarArquivo() da classe ZipZap e informando a relação de arquivos e o local e nome do arquivo ZIP a ser gerado.
2- A funcionalidade para extrair um arquivo ZIP funciona assim:
O usuário informa o nome e local do arquivo ZIP e a seguir o local de destino para onde os arquivos deverão ser extraídos.
Após isso basta clicar no botão Extrair conteúdo do arquivo ZIP cujo código do evento Click é visto a seguir:
private void btnExtrairZIP_Click(object sender, EventArgs e)
{
try
{
ZipZap.ExtrairArquivoZip(txtLocalizacaoArquivoZIP.Text, txtDestinoZIP.Text);
MessageBox.Show("A arquivo\n\n " + txtLocalizacaoArquivoZIP.Text +
"foi extraído com sucesso na pasta \n\n" + txtDestinoZIP.Text);
}
catch (Exception ex)
{
MessageBox.Show("Ocorreu um erro ao extrair o arquivo ZIP.\n\n " + ex.Message);
}
}
|
O código usa o método ExtrairArquivo() da classe ZipZap onde informamos o nome e local do arquivo ZIP e o local de destino para onde os arquivos serão extraídos.
Executando o projeto e realizando a criação de um arquivo ZIP vemos a seguir o resultado obtido :
Pegue o projeto completo aqui:
CriandoExtraindo_ZIP.zip
De sorte que haja em vós o mesmo sentimento que houve também em Cristo Jesus,
Que, sendo em forma de Deus, não teve por usurpação ser igual a Deus,
Mas esvaziou-se a si mesmo, tomando a forma de servo, fazendo-se semelhante aos
homens;
E, achado na forma de homem, humilhou-se a si mesmo, sendo obediente até à
morte, e morte de cruz.
Filipenses 2:5-8
Referências: