Compactando e Descompactando Arquivos com a classe GZipStream

Neste artigo, vamos abordar a clase GZipStream que possui métodos e propriedades para compactar e descompactar streams.

Compactando e Descompactando Arquivos com a classe GZipStream

 

Tarefas de compactar e descompactar arquivos são essenciais no nosso dia-dia. A .NET Framework 2.0 possui o namespace Sytem.IO.Compression que contém classes para compactar e descompactar streams. Neste artigo, vamos abordar a clase GZipStream que possui métodos e propriedades para compactar e descompactar streams.

Inicie o Visual Studio.Net e adicione um novo projeto com o nome: CompactarArquivos.

 

Figura 1 – Adicionando um novo projeto.

 

Adicione alguns controles (textbox, botões e groupbox) ao formulário de forma que fique semelhante à imagem abaixo:

 

Figura 2 – Formulário modelo do artigo.

 

Neste formulário temos dois componentes GroupBox para agrupar as funções de compactação e descompactação respectivamente. Em cada groupbox existem duas caixas de textos que contém o caminho do arquivo de origem e destino. Ainda temos os botões: Abrir Arquivo que abre uma janela de dialogo (OpenFileDialog)  onde o usuário seleciona o arquivo que será compactado ou descompactado e  os botões: Compactar Para e Descompactar Para, que abre uma janela de dialogo (SaveFileDialog) onde o usuário selecionará o caminho e o nome do arquivo para ser compactado ou descompactado. Por ultimo temos os botões Compactar e Descompactar onde o usuário executa as respectivas funções de compactação e descompactação após ter selecionado a origem e destino dos arquivos.

Para manipular arquivos e trabalhar com as classes de compressão devemos importas as namespaces System.IO e System.IO.Compression respectivamente.

 

Imports System.IO

Imports System.IO.Compression

Figura 3 - Importando as namespaces de acesso a arquivos e compressão.

Para compactar e descompactar arquivos vamos um método chamado,  compactacaoArquivo() que receberá como parâmetros duas strings contendo a Origem e Destinos dos arquivos e um inteiro informando o tipo(0 para compactar e 1 para descompactar). Veja na imagem abaixo o código do método compactacaoArquivo().

Public Function compactacaoArquivo(ByVal Origem As String, ByVal Destino As String, ByVal tipo As Integer)

 

'cria as streams de origem e destino do arquivo

Dim o As New FileStream(Origem, FileMode.Open, FileAccess.Read)

Dim d As New FileStream(Destino, FileMode.Create, FileAccess.Write)

 

'cria um objeto gzstream para ser compactado

Dim arquivoCompactado As GZipStream

 

If tipo = 0 Then 'modo compress

arquivoCompactado = New GZipStream(d, CompressionMode.Compress, True)

 

Else 'modo descompress

arquivoCompactado = New GZipStream(d, CompressionMode.Decompress, True)

 

End If

 

'buffer e bytes lidos de um arquivo origem para um outro de destino

Dim buffer(4096) As Byte

Dim Lidos As Integer

 

Try

 

While Lidos <> 0

Lidos = o.Read(buffer, 0, 4096)

arquivoCompactado.Write(buffer, 0, Lidos)

End While

 

Return True

Catch ex As Exception

Return False

Finally

'fecha todas as streams

o.Close()

d.Close()

arquivoCompactado.Close()

End Try

 

End Function

Figura 4 - Codificação do Método para Compactar e Descompactar arquivos.

Adicione dois controles OpenFileDialog e SaveFileDialog ao formulário.

Esses componentes serão responsáveis por localizar o arquivo de origem e de destino das funções de compactar e descompactar. Quando o usuário clicar no botão OK dessas janelas de diálogos, o caminho do arquivo selecionado será armazenados nas textbox de Origem e Destino.

 

Figura 5 – Aba Dialogs da toolbox.

 

Veja o código para abrir uma janela de dialogo e inserir o arquivo selecionado em uma textbox.

 

Private Sub btCompactarOrigem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btCompactarOrigem.Click

OpenFileDialog1.ShowDialog() 'abre a janela de dialogo

txtCompactarOrigem.Text = OpenFileDialog1.FileName 'retorna o caminho do arquivo selecionado

End Sub

 

Private Sub btCompactarDestino_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btCompactarDestino.Click

SaveFileDialog1.ShowDialog()

txtCompactarDestino.Text = SaveFileDialog1.FileName

End Sub

 

Private Sub btDescompactarOrigem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btDescompactarOrigem.Click

OpenFileDialog2.ShowDialog()

txtDescompactarOrigem.Text = OpenFileDialog2.FileName

End Sub

 

Private Sub btDescompactarDestino_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btDescompactarDestino.Click

SaveFileDialog2.ShowDialog()

txtDescompactarDestino.Text = SaveFileDialog2.FileName

End Sub

Figura 6 – Abrindo as janelas de diálogos.

 

Para finalizar, temos os códigos do botões Compactar e Descompactar.

 

Private Sub btExecutarCompactar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btExecutarCompactar.Click

If compactacaoArquivo(Me.txtCompactarOrigem.Text, Me.txtCompactarDestino.Text, 0) = True Then

MsgBox("Arquivo Compactado")

Else

MsgBox("Erro ao compactar o arquivo")

End If

End Sub

 

Private Sub btExecutarDescompactar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btExecutarDescompactar.Click

If compactacaoArquivo(Me.txtDescompactarOrigem.Text, Me.txtDescompactarDestino.Text, 1) = True Then

MsgBox("Arquivo descompactado")

Else

MsgBox("Erro ao descompactar o arquivo")

End If

End Sub

Figura 7 – Executando o Método de Compactação de Arquivo.

 

Agora é hora de executar a aplicação. Se tudo ocorrer corretamente teremos o seguinte resultado:

 

Figura 8 – Executando a aplicação.

 

Chegamos ao final do artigo. Até o próximo
Ebook exclusivo
Dê um upgrade no início da sua jornada. Crie sua conta grátis e baixe o e-book

Artigos relacionados