VB.NET - Criando, extraindo e abrindo arquivos ZIP com a classe ZipFile


 No artigo de hoje eu vou mostrar como podemos usar a classe ZipFile para criar, abrir e extrair arquivos ZIP.


A classe ZipFile esta disponível a partir da versão 4.5 da plataforma .NET e veio para simplificar o tratamento de arquivos ZIP fornecendo métodos estáticos para criar, extrair e abrir esses arquivos.

 

Para poder usar os métodos dessa classe você tem que referenciar o assembly System.IO.Compression.FileSystem no seu projeto.

 

A seguir temos os métodos da classe ZipFile:
 

Nome Descrição
CreateFromDirectory(String, String) Cria um arquivo zip que contém os arquivos e diretórios do diretório especificado.
CreateFromDirectory(String, String, CompressionLevel, Boolean) Cria um arquivo zip que contém os arquivos e diretórios do diretório especificado, usa o nível de compactação especificado e opcionalmente inclui o diretório base.
CreateFromDirectory(String, String, CompressionLevel, Boolean, Encoding) Cria um arquivo neutro zip que contém os arquivos e diretórios do diretório especificado, usa o nível e a codificação de caracteres especificados de compactação para nomes de entrada, e opcionalmente inclui o diretório base.
ExtractToDirectory(String, String) Extrai todos os arquivos do arquivo zip especificado em um diretório no sistema de arquivos.
ExtractToDirectory(String, String, Encoding) Extrai todos os arquivos do arquivo zip especificado em um diretório do sistema de arquivos e usa a codificação de caracteres especificada para nomes de entrada.
Open(String, ZipArchiveMode) Abre um arquivo zip no caminho especificado e no modo especificado.
Open(String, ZipArchiveMode, Encoding) Abre um arquivo zip no caminho especificado, no modo especificado, e usando a codificação de caracteres especificada para nomes de entrada.
OpenRead Abre um arquivo zip para leitura no caminho especificado.

 

fonte: https://msdn.microsoft.com/pt-br/library/system.io.compression.zipfile%28v=vs.110%29.aspx


Recursos usados:

Criando o projeto no Visual Studio 2013 Express for windows desktop

Abra o VS 2013 Express for windows desktop e clique em New Project;

Selecione a linguagem Visual Basic e o template Windows Forms Application;

Informe o nome Usando_ZipFile e clique no botão OK;

 

A seguir vamos incluir uma referência no projeto aos assemblies da classe ZipFIle.

 

Clique no menu PROJECT -> Add Reference e selecione os itens System.IO.Compression e System.IO.Compression.FileSystem clicando a seguir no botão OK;

 

 

Formulário principal do projeto form1.vb inclua os seguinte controles a partir da ToolBox:

Disponha os controles no formulário form1.vb conforme o leiaute abaixo:

 

Após isso declare no início do formulário os namespaces:

Imports System.IO.Compression

Agora vamos definir em cada evento Click dos botões de comando o código pertinente a cada tarefa:

1- Criar Arquivo ZIP

 Private Sub btnCriarZIP_Click(sender As Object, e As EventArgs) Handles btnCriarZIP.Click
        If String.IsNullOrWhiteSpace(txtDiretorioOrigem.Text) Then
            MessageBox.Show("Informe o diretório de origem dos arquivos ZIP", "Origem", MessageBoxButtons.OK, MessageBoxIcon.Information)
            txtDiretorioOrigem.Focus()
            Return
        End If
        If String.IsNullOrWhiteSpace(txtNomeArquivoZip.Text) Then
            MessageBox.Show("Informe o local e nome do arquivo ZIP a ser gerado", "Arquivo ZIP", MessageBoxButtons.OK, MessageBoxIcon.Information)
            txtDiretorioDestino.Focus()
            Return
        End If
        Try
            ZipFile.CreateFromDirectory(txtDiretorioOrigem.Text, txtNomeArquivoZip.Text)
            MessageBox.Show("Arquivo ZIP criado com sucesso", "Arquivo ZIP", MessageBoxButtons.OK, MessageBoxIcon.Information)
        Catch ex As Exception
            MessageBox.Show("Erro : " & ex.Message, "Erro Arquivo ZIP", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
    End Sub
 

2- Abrir Arquivo ZIP

Private Sub btnAbrirZIP_Click(sender As Object, e As EventArgs) Handles btnAbrirZIP.Click
        If String.IsNullOrWhiteSpace(txtNomeArquivoZip.Text) Then
            MessageBox.Show("Informe o local e nome do arquivo ZIP a ser gerado", "Arquivo ZIP", MessageBoxButtons.OK, MessageBoxIcon.Information)
            txtDiretorioDestino.Focus()
            Return
        End If
        Dim localNomeArquivoZIP As String = txtNomeArquivoZip.Text
        Try
            If File.Exists(localNomeArquivoZIP) Then
                Using arquivoZip As ZipArchive = ZipFile.Open(localNomeArquivoZIP, ZipArchiveMode.Read)
                    For Each entry As ZipArchiveEntry In arquivoZip.Entries
                        ' ... Exibe as propriedades e extrai para o diretorio
                        lbArquivos.Items.Add("Tamanho: " + entry.CompressedLength.ToString)
                        lbArquivos.Items.Add("Nome   : " + entry.Name)
                        'podemos também usar o método ExtractToFile para extrair para um arquivo
                        'entry.ExtractToFile("c:\diretorio" + entry.Name)
                    Next
                End Using
            Else
                MessageBox.Show("Arquivo ZIP não existe no local", "Não Existe ZIP", MessageBoxButtons.OK, MessageBoxIcon.Error)
            End If
        Catch ex As Exception
            MessageBox.Show("Erro : " & ex.Message, "Erro Arquivo ZIP", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
    End Sub
 

3- Extrair Arquivo ZIP

 Private Sub btnExtrairZIP_Click(sender As Object, e As EventArgs) Handles btnExtrairZIP.Click
        If String.IsNullOrWhiteSpace(txtDiretorioDestino.Text) Then
            MessageBox.Show("Informe o diretório de destino do arquivo ZIP", "Destino", MessageBoxButtons.OK, MessageBoxIcon.Information)
            txtDiretorioDestino.Focus()
            Return
        End If
        If String.IsNullOrWhiteSpace(txtNomeArquivoZip.Text) Then
            MessageBox.Show("Informe o local e nome do arquivo ZIP a ser gerado", "Arquivo ZIP", MessageBoxButtons.OK, MessageBoxIcon.Information)
            txtDiretorioDestino.Focus()
            Return
        End If
        Try
            If File.Exists(txtNomeArquivoZip.Text) Then
                ZipFile.ExtractToDirectory(txtNomeArquivoZip.Text, txtDiretorioDestino.Text)
                MessageBox.Show("Arquivos ZIP extraidos com sucesso", "Extrair ZIP", MessageBoxButtons.OK, MessageBoxIcon.Information)
            Else
                MessageBox.Show("Arquivo ZIP não existe no local", "Não Existe ZIP", MessageBoxButtons.OK, MessageBoxIcon.Error)
            End If
        Catch ex As Exception
            MessageBox.Show("Erro : " & ex.Message, "Erro Arquivo ZIP", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
    End Sub
 

Executando o projeto iremos obter o seguinte resultado após realizar algumas operações:

Pegue o projeto completo aqui:   Usando_ZipFIle.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

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti