1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Vb.NET ou C++ - Extrair um ficheiro

Discussão em 'Programação' iniciada por XYZ, 5 de Maio de 2009. (Respostas: 14; Visualizações: 2590)

  1. XYZ

    XYZ

    Boas tardes.
    Estive a fazer umas pesquisas no Google e não encontrei nada, sou algo fresco ainda no Visual Basic, assim como C++.
    Sei que é possível criar um programa em Visual Basic, assim como em C++, que extraia um ficheiro RAR/ZIP para uma pasta indicada anteriormente (No caso do visual basic uma textbox, no c++ num scanf).

    Qual seria o método a ser usado, tanto em C++ como em Visual Basic, para extrair o ficheiro "comprimido.rar" localizado na pasta do programa, para a pasta "X" (Dada pelo utilizador)?
     
  2. iznougud

    iznougud I quit My Job for Folding

    Nao sei se será directo. Provavelmente tens de arranjar uma libraria para fazer isso...
     
  3. ribeiro55

    ribeiro55 Power Member

  4. iznougud

    iznougud I quit My Job for Folding

    Ainda ando com as versões 2005 :D
     
  5. ribeiro55

    ribeiro55 Power Member

    Desde que actualizes a .NET Framework , teóricamente até no VB2k3 tinhas acesso às classes.
    Exprimenta a DotNetZip que funciona muito bem.
     
  6. XYZ

    XYZ

    Código:
    Public Class Form1
    
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim OverwriteAnyExistingFiles As Boolean = True
            Dim ZipToUnpack As String = "ficheiro.zip"
            Dim UnpackDirectory As String = "C:/Extrair/"
            TextBox1.Text = String.Format("Extracting file {0} to {1}", ZipToUnpack, UnpackDirectory)
            Using zip1 As ZipFile = ZipFile.Read(ZipToUnpack)
                AddHandler zip1.ExtractProgress, AddressOf MyExtractProgress
                Dim e As ZipEntry
                ' here, we extract every entry, but we could extract conditionally,
                ' based on entry name, size, date, checkbox status, etc.   
                For Each e In zip1
                    e.Extract(UnpackDirectory, OverwriteAnyExistingFiles)
                Next
            End Using
    
        End Sub
    End Class
    Estou a obter um erro em:
    Código:
    Type 'ZipFile' is not defined.
    
     
    Última edição: 6 de Maio de 2009
  7. PNDmartins

    PNDmartins Power Member

    Estás a cometer 2 erros:

    Código:
    Dim ZipToUnpack As String = "ficheiro.zip"
    Aqui tens que meter o caminho completo para o ficheiro. Ex: "C:\ficheiro.zip"

    Código:
    Dim UnpackDirectory As String = "C:/Extrair/"
    e aqui estás a meter as barras ao contrário.

    E ainda podes simplificar o código desta forma:

    Código:
     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim OverwriteAnyExistingFiles As Boolean = True
            Dim ZipToUnpack As String = "C:\ficheiro.zip"
            Dim UnpackDirectory As String = "C:\Extrair\"
    
            TextBox1.Text = String.Format("Extracting file {0} to {1}", ZipToUnpack, UnpackDirectory)
    
            Dim Zip1 As ZipFile = ZipFile.Read(ZipToUnpack)
            AddHandler zip1.ExtractProgress, AddressOf MyExtractProgress
    
            For Each e as ZipEntry In zip1
                e.Extract(UnpackDirectory, OverwriteAnyExistingFiles)
            Next
    
        End Sub
    
     
    Última edição: 6 de Maio de 2009
  8. XYZ

    XYZ

    Obrigado pela tua resposta esclarecedora!
    Tenho uma pergunta, e se o ficheiro ZIP estiver na pasta onde esta o programa?
    Seria (...\Ficheiro\Arquivo.zip)?

    Mesmo usando o código que me deste, continuo a ter o mesmo erro, será que não sei importar o DLL do DotNetZip?(Como se faz?)
     
    Última edição: 6 de Maio de 2009
  9. PNDmartins

    PNDmartins Power Member

    Como é que fizeste para importar o .dll para o projecto??

    Tirando isso o unico erro que tou a ver assim derepente é teres dado um nome diferente do ficheiro.
     
  10. ribeiro55

    ribeiro55 Power Member

    Basta:
    Código:
            Application.StartupPath & "\Ficheiro\Arquivo.zip"
    Ou
    Código:
            My.Application.Info.DirectoryPath & "\Ficheiro\Arquivo.zip"
    Mas porque não usar um OpenFileDialog?
    Código:
    Dim OFD as new OpenFileDialog
    OFD.ShowDialog()
    msgbox(OFD.Filename)
    Assim é o user que vai ao sítio certo, no caso de ser uma localização variável.
     
  11. XYZ

    XYZ

    Estou apenas a fazer Add Reference -> Browse -> Ioni[​IMG]c.zlib.dll

    Neste codigo:
    Código:
    Public Class Form1
    
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Dim OFD As New OpenFileDialog
            OFD.ShowDialog()
            MsgBox(OFD.FileName)
        End Sub
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim OverwriteAnyExistingFiles As Boolean = True
            Dim ZipToUnpack As String = "D:\Setup.zip"
            Dim UnpackDirectory As String = "C:\Extrair\"
            RichTextBox1.Text = String.Format("Extracting file {0} to {1}", ZipToUnpack, UnpackDirectory)
            Dim Zip1 As ZipFile = ZipFile.Read(ZipToUnpack)
            AddHandler zip1.ExtractProgress, AddressOf MyExtractProgress
            For Each e As ZipEntry In zip1
                e.Extract(UnpackDirectory, OverwriteAnyExistingFiles)
            Next
        End Sub
    End Class

    Continuo a ter estes erros:
    Código:
    Error    1    Type 'ZipFile' is not defined.
    Error    2    Name 'MyExtractProgress' is not declared.
    Error    3    Type 'ZipEntry' is not defined.
    
     
    Última edição: 6 de Maio de 2009
  12. PNDmartins

    PNDmartins Power Member

    Experimenta acrescentar isto:

    Código:
    [COLOR="Blue"]Imports[/COLOR] Iconic.Zip
    
    antes disto:
    Código:
    [COLOR="Blue"]Public Class[/COLOR] Form1
    
    [COLOR="Blue"]End Class[/COLOR]
    
     
  13. ribeiro55

    ribeiro55 Power Member

    Isto não está a fazer rigorosamente nada.
    Se te limitares a fazer copy/paste.....
    Deverás substituír o teu "D:\Setup.zip" por OFD.FileName.
    No form load e ainda por cima a mandar para uma messagebox não te está a fazer rigorosamente nada.
     
    Última edição: 6 de Maio de 2009
  14. XYZ

    XYZ

    Não encontra o ficheiro, onde tenho de o por?
    Agradecido pela tua resposta.


    Desculpa o copy paste, tive de sair, mas já entendi como funciona.
    Obrigado pelas tuas sugestões.
     
  15. PNDmartins

    PNDmartins Power Member

    Na janela "Solution Explorer", carrega no butao "show all files" para apresentar todos os ficheiros de que o projecto depende, butão direito nas "References" e "Add New Reference".

    Depois procura o .dll

    A partir deste momento deve tar a funcionar correctamente.
     

Partilhar esta Página