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