Desenvolvimento - Visual Basic .NET
Compactar de Descompactar arquivos
Compactação e descompactação de arquivos utilizando o vb.net 2005.
por Thiago do Nascimento LongchampsAtualizado em 23 de julho de 2009.
Depois do artigo sobre a realização de backup no SQL Server via código, me fizeram a seguinte observação: "Mesmo sendo gerado pelo sistema, o usuário ainda precisa compactar o copiar o backup para outra unidade.". Realmente, em vários momentos, seria ideal realizar uma compactação dos arquivos para que possamos enviá-lo por e-mail, disponibilizá-lo para download ou mesmo para o armazenamento dos arquivos de backup.
Nesse artigo, iremos abordar exatamente essa tarefa! COMPACTAÇÃO E DESCOMPACTAÇÃO DE ARQUIVOS.
Colocando a mão na massa
Primeiro, vamos criar um projeto Windows forms, e no form1 vamos incluir os seguintes controles:
O form1 deve ficar com esta cara:
Rotina para compactar o arquivo
No clique do botão BtnCompactar, insira o código abaixo:
Rotina para descompactar o arquivo
No clique do botão BtnDescompactar, insira o código abaixo:
Testando a aplicação
Rodando a aplicação, podemos ver o resultado da compactação de descompactação do arquivo. É bom lembrar, que o formato gerado pela classe do framework também é reconhecido pelo winzip e winrar.
Conclusão
De maneira bem simples e sem adicionar nenhuma biblioteca ou controle de terceiros, conseguimos compactar de descompactar arquivos de uma maneira transparente para o usuário.
Ok, OK. Vocês devem estar se perguntando: Como fazer para compactar 2 ou mais arquivos de uma vez? A resposta é: Infelizmente, com essa classe não conseguimos executar essa tarefa sem utilizar de alguns artifícios e um pouco de criatividade. Mas se você não quiser gastar muito tempo para implementar a solução para vários arquivos, existem várias dlls, como ChilkatDotNet2, UnRar que já executam esta tarefa.
Depois do artigo sobre a realização de backup no SQL Server via código, me fizeram a seguinte observação: "Mesmo sendo gerado pelo sistema, o usuário ainda precisa compactar o copiar o backup para outra unidade.". Realmente, em vários momentos, seria ideal realizar uma compactação dos arquivos para que possamos enviá-lo por e-mail, disponibilizá-lo para download ou mesmo para o armazenamento dos arquivos de backup.
Nesse artigo, iremos abordar exatamente essa tarefa! COMPACTAÇÃO E DESCOMPACTAÇÃO DE ARQUIVOS.
Colocando a mão na massa
Primeiro, vamos criar um projeto Windows forms, e no form1 vamos incluir os seguintes controles:
Name | Tipo | Text |
LblArquivoCompactar | Label | Arquivo a ser compactado |
TxtArquivoCompactar | Textbox | |
LblArquivoDescompactar | Label | Arquivo a ser descompactado |
TxtArquivoDescompactar | Textbox | |
BtnCompactar | Button | Compactar |
BtnDescompactar | Button | Descompactar |
O form1 deve ficar com esta cara:
Rotina para compactar o arquivo
No clique do botão BtnCompactar, insira o código abaixo:
Private Sub BtnCompactar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles BtnCompactar.Click "<Selecionar o arquivo a ser compactado> Dim LDlg As New OpenFileDialog() If LDlg.ShowDialog() <> Windows.Forms.DialogResult.OK Then Exit Sub Else TxtArquivoCompactar.Text = LDlg.FileName End If "</Selecionar o arquivo a ser compactado> "<Processo de compatação> Try "Arquivo Original Dim LSteOrigem As New System.IO.FileStream(TxtArquivoCompactar.Text, _ System.IO.FileMode.Open, System.IO.FileAccess.Read) "Arquivo de destino Dim LSteDestino As New System.IO.FileStream(TxtArquivoCompactar.Text & ".gz", System.IO.FileMode.Create, System.IO.FileAccess.Write) "Stream que irá comprimir os dados Dim LSteCompactador As New System.IO.Compression.GZipStream(LSteDestino, System.IO.Compression.CompressionMode.Compress, True) Dim LBytBloco(500) As Byte Dim LIntLido As Integer = 0 Do LIntLido = LSteOrigem.Read(LBytBloco, 0, 500) If (LIntLido <> 0) Then LSteCompactador.Write(LBytBloco, 0, LIntLido) Else Exit Do End If Loop LSteOrigem.Close() LSteCompactador.Close() LSteDestino.Close() Catch ex As Exception MessageBox.Show("Houve um erro na compactação de arquivos." & _ ex.Message, "Erro", MessageBoxButtons.OK) Exit Sub End Try MessageBox.Show("Arquivo compactado.", "Concluído", MessageBoxButtons.OK, MessageBoxIcon.Information) "</Processo de compatação> End Sub
Rotina para descompactar o arquivo
No clique do botão BtnDescompactar, insira o código abaixo:
Private Sub BtnDescompactar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles BtnDescompactar.Click "<Selecionar o arquivo a ser descompactado> Dim LDlg As New OpenFileDialog() If LDlg.ShowDialog() <> Windows.Forms.DialogResult.OK Then Exit Sub Else TxtArquivoDescompactar.Text = LDlg.FileName End If "</Selecionar o arquivo a ser compactado> "<Processo de descompatação> Try "Arquivo Original Dim LSteOrigem As New System.IO.FileStream(TxtArquivoDescompactar.Text, _ System.IO.FileMode.Open, System.IO.FileAccess.Read) "Arquivo de destino Dim LSteDestino As New System.IO.FileStream(TxtArquivoDescompactar.Text.Replace(".gz", ""), _ System.IO.FileMode.Create, System.IO.FileAccess.Write) "Stream que irá comprimir os dados Dim LSteCompactador As New System.IO.Compression.GZipStream(LSteOrigem, _ System.IO.Compression.CompressionMode.Decompress, True) Dim LBytBloco(500) As Byte Dim LIntLido As Integer = 0 Do LIntLido = LSteCompactador.Read(LBytBloco, 0, 500) If (LIntLido <> 0) Then LSteDestino.Write(LBytBloco, 0, LIntLido) Else Exit Do End If Loop LSteOrigem.Close() LSteCompactador.Close() LSteDestino.Close() Catch ex As Exception MessageBox.Show("Houve um erro na descompactação de arquivos." & _ ex.Message, "Erro", MessageBoxButtons.OK) Exit Sub End Try MessageBox.Show("Arquivo descompactado.", "Concluído", MessageBoxButtons.OK, MessageBoxIcon.Information) "</Processo de descompatação> End Sub
Testando a aplicação
Rodando a aplicação, podemos ver o resultado da compactação de descompactação do arquivo. É bom lembrar, que o formato gerado pela classe do framework também é reconhecido pelo winzip e winrar.
Conclusão
De maneira bem simples e sem adicionar nenhuma biblioteca ou controle de terceiros, conseguimos compactar de descompactar arquivos de uma maneira transparente para o usuário.
Ok, OK. Vocês devem estar se perguntando: Como fazer para compactar 2 ou mais arquivos de uma vez? A resposta é: Infelizmente, com essa classe não conseguimos executar essa tarefa sem utilizar de alguns artifícios e um pouco de criatividade. Mas se você não quiser gastar muito tempo para implementar a solução para vários arquivos, existem várias dlls, como ChilkatDotNet2, UnRar que já executam esta tarefa.
- Entity Framework 4: Repositório GenéricoVisual Basic .NET
- As edições 14 da Easy .net Magazine e 88 da .net Magazine já estão disponíveis.ADO.NET
- Postando no Twiiter com .NET e Migre.meC#
- Setup ApplicationsVisual Basic .NET
- Problemas na manipulação de arquivos do MS Excel com .NETVisual Basic .NET