03/12/2010 - 02:39:28

VB.NET - Arquivos Zip


Comprimir múltiplos arquivos nunca foi tão fácil, como é agora com o uso do .NET Framework 3.0. Usando a nova classe ZipPackage do namespace System.IO.Packging e algumas linhas código, você pode criar um arquivo .zip com múltiplos arquivos.

Usando o código

Adicione uma referência ao “WindowsBase.dll”, clique com o botão direito do mouse sobre o projeto e clique em Add Reference e adicione a referencia a WindowsBase.dll. Se você não encontra-la na aba .NET, clique na aba Browse e procure no diretório C:Program FilesReference AssembliesMicrosoftFrameworkv3.0

Adicione no inicio da classe a referencia a classe abaixo:


 Imports System.IO.Packaging

Escreva o código abaixo:


        Dim zipPath As String = "C:TEMPmyzip.zip"
        Dim fileToAdd As String = "C:TEMPCompressMe.txt"

        'Abre o arquivo zip, se ele existe, senão cria um novo
        Dim zip As Package = ZipPackage.Open(zipPath, _
                  IO.FileMode.OpenOrCreate, IO.FileAccess.ReadWrite)

        'Substitui os espaços por underscore (_)
        Dim uriFileName As String = fileToAdd.Replace(" ", "_")

        'A Uri sempre começa com uma barra "/" 
        Dim zipUri As String = String.Concat("/", _
                  IO.Path.GetFileName(uriFileName))

        Dim partUri As New Uri(zipUri, UriKind.Relative)
        Dim contentType As String = _
                  Net.Mime.MediaTypeNames.Application.Zip

        'O PackagePart contém as informações:
        ' Sempre extrair o arquivo quando ele é extraído (partUri) 
        ' O tipo do conteúdo do fluxo (MIME type) - (contentType) 
        ' O tipo de compressão usado (CompressionOption.Normal) 
        Dim pkgPart As PackagePart = _
                  zip.CreatePart(partUri, contentType, _
                  CompressionOption.Normal)

        'Leia todos os bytes do arquivo para adiciona-lo ao arquivo zip 
        Dim bites As Byte() = File.ReadAllBytes(fileToAdd)

        'Comprimir e escrever os byte no arquivo zip 
        pkgPart.GetStream().Write(bites, 0, bites.Length)

        zip.Close() 'Fecha o arquivo zip

Podemos melhorar o código para aumentar a eficiência:


    Private Sub ZipFiles()

        Dim zipPath As String = "C:TEMPmyzip.zip"

        'Abre o arquivo zip, se ele existe, senão cria um novo 
        Dim zip As Package = ZipPackage.Open(zipPath, _
             IO.FileMode.OpenOrCreate, IO.FileAccess.ReadWrite)

        'Adicionar vários arquivos:
        AddToArchive(zip, "C:TEMPCompressMe1.txt")
        AddToArchive(zip, "C:TEMPCompressMe2.txt")
        AddToArchive(zip, "C:TEMPCompressMe3.txt")

        zip.Close() 'Fecha o arquivo zip

    End Sub


    Private Sub AddToArchive(ByVal zip As Package, _
                         ByVal fileToAdd As String)

        'Substitui os espaços por underscore (_) 
        Dim uriFileName As String = fileToAdd.Replace(" ", "_")

        'A Uri sempre começa com uma barra "/"  
        Dim zipUri As String = String.Concat("/", _
                   IO.Path.GetFileName(uriFileName))

        Dim partUri As New Uri(zipUri, UriKind.Relative)
        Dim contentType As String = _
                   Net.Mime.MediaTypeNames.Application.Zip

        'O PackagePart contém as informações:
        ' Sempre extrair o arquivo quando ele é extraído (partUri) 
        ' O tipo do conteúdo do fluxo (MIME type) - (contentType) 
        ' O tipo de compressão usado (CompressionOption.Normal)   
        Dim pkgPart As PackagePart = zip.CreatePart(partUri, _
                   contentType, CompressionOption.Normal)

        'Leia todos os bytes do arquivo para adiciona-lo ao arquivo zip 
        Dim bites As Byte() = File.ReadAllBytes(fileToAdd)

        'Comprimir e escrever os byte no arquivo zip 
        pkgPart.GetStream().Write(bites, 0, bites.Length)

    End Sub

Pontos importantes

Algo que você vai notar, é que ao abrir o arquivo .zip em um utilitário zip, o arquivo “[Content_Types].xml”. Infelizmente, você não tem controle sobre a presença deste arquivo. É um arquivo que inclui informações sobre o tipo de conteúdo dos arquivos que estão incluídos no arquivo zip, como txt para arquivo texto, ou doc para um arquivo do Word, etc.

Além disso, se você definir qualquer uma das propriedades para o PackagePart (pkgPart.Package.PackageProperties), então você terá arquivos adicionais adicionados ao arquivo zip, com o nome de ####.psmdcp (onde #### é um número aleatório), que é um arquivo que contém metadados para as propriedades do Package e um arquivo .rels, que é um arquivo XML sobre o relacionamento dos metadados.

Formas de Pagamento

Até 12x no cartão (3x sem juros):
Até 10x no cartão (4x sem juros)

TEF / Transferência Eletrônica / Débito:
TEF / Transferência Eletrônica / Débito

Pagamento Digital:
Pagamento Digital

Boleto Bancário:
Boleto bancário


O TreinaWeb é Auditado!

O TreinaWeb e seus meios de pagamento são auditados e certificados.

Seus dados estarão 100% protegidos:

Visualizou o selo site Blindado? Navegue tranquilamente, esse site está PROTEGIDO CONTRA HACKERS. Realizamos diariamente milhares de testes para garantir sua navegação segura. Clique no selo e confira nossa certificação.

Somos afiliados:

ABED - Associação Brasileira de ensino à distância

© 2004 - 2013 TreinaWeb - Cursos Online de TI

TreinaWeb Tecnologia LTDA - CNPJ: 06.156.637/0001-58
Av. Paulista, 1765, Conj 71 e 72 - Bela Vista, São Paulo - SP 01311-200