Fala, galera!!
Segue um código interessante para compactar e descompactar arquivos.
O código a seguir utiliza uma DLL de terceiros (open source) que pode ser baixada aqui.
Public Sub DescompactarArquivoDiretorio(ByVal sArquivoZip As String, ByVal sDiretorioParaDescompactar As String)
Dim oMeuZip As New ICSharpCode.SharpZipLib.Zip.FastZip
oMeuZip.ExtractZip(sArquivoZip, sDiretorioParaDescompactar, ".*")
End Sub
Public Sub CompactarArquivo(ByVal sArquivoOrigem As String, ByVal sArquivoDestino As String)
Dim sz As New ICSharpCode.SharpZipLib.Zip.FastZip
Dim sArquivoZip As String = String.Empty
' Crio um arquivo do tipo stream, aprontando para o meu zip de destino.
Dim strmZipOutputStream As ICSharpCode.SharpZipLib.Zip.ZipOutputStream
strmZipOutputStream = New ICSharpCode.SharpZipLib.Zip.ZipOutputStream(File.Create(sArquivoDestino))
' Seto o nível de compressão (0->Sem compressão / 9-> Compressão Máxima)
strmZipOutputStream.SetLevel(9)
' Leio o arquivo de origem
Dim strmFile As FileStream = File.OpenRead(sArquivoOrigem)
Dim abyBuffer(strmFile.Length - 1) As Byte
strmFile.Read(abyBuffer, 0, abyBuffer.Length)
' Aqui eu trato para pegar somente o arquivo, sem os diretórios
' O split é um método que separa a string, de acordo com um caractere, no meu caso "\"
' Cada indice da minha matriz é um diretório, e o ultimo é o arquivo
Dim sAuxArquivo As String() = Split(sArquivoOrigem, "\")
' Crio uma variável, adicionando o meu Arquivo ao Zip
' Com ubound, eu pego o ultimo índice da minha matriz, que é o nome do meu arquivo.
Dim objZipEntry As ICSharpCode.SharpZipLib.Zip.ZipEntry = New ICSharpCode.SharpZipLib.Zip.ZipEntry(sAuxArquivo(UBound(sAuxArquivo)))
' Seto a data de criação
objZipEntry.DateTime = DateTime.Now
' Informo o tamanho do stream. (Do meu arquivo a ser zipado)
objZipEntry.Size = strmFile.Length
' Fecho meu stream para liberar memória
strmFile.Close()
' Adiciono no objeto para gerar o zip.
strmZipOutputStream.PutNextEntry(objZipEntry)
strmZipOutputStream.Write(abyBuffer, 0, abyBuffer.Length)
' "Limpo" o objeto
strmZipOutputStream.Finish()
strmZipOutputStream.Close()
End Sub
É isso ae.
Um abraço e até a próxima!!
Assinar:
Postar comentários (Atom)
opa cara blz?
ResponderExcluirvc sabe me dizer pq isso não funciona qunado esta na locaweb?
Olá, Alberto!
ResponderExcluirVerifique as permissões de escrita no diretório da sua aplicação.
Abraços!