Lucas Siqueira

Active Member
Licensed User
Longtime User
Selecionar e Extrair Aquivo .ZIP:
Private Sub selecionarExtrairZIP_Click

    ' Define o diretório interno padrão e o nome do arquivo ZIP que será manipulado
    Dim diretorioArquivo As String = xui.DefaultFolder
    Dim nomeArquivo As String = "arquivo.zip"
    
    ' Se já existir um arquivo ZIP com esse nome, deleta para evitar conflitos
    If File.Exists(diretorioArquivo, nomeArquivo) Then
        Log("Apaga arquivo ZIP na pasta interna chamado: " & nomeArquivo)
        File.Delete(diretorioArquivo, nomeArquivo)
    End If
    
    Log("Selecionar o arquivo ZIP")
    
    ' Variáveis para armazenar informações do arquivo selecionado
    Dim Success As Boolean = False
    Dim FileName As String = ""
    Dim Dir As String = ""
    
    #if b4a
        ' Android: abre seletor de arquivos para escolher um arquivo ZIP
        Dim cc As ContentChooser
        cc.Initialize("cc")
        cc.Show("application/zip", "Choose zip file")
        Wait For CC_Result (Success As Boolean, Dir As String, FileName As String)
    #Else b4i
        ' iOS: usa o DocumentPicker para escolher arquivo ZIP
        Dim DocumentPicker As DocumentPickerViewController
        DocumentPicker.InitializeImport("picker", Array("com.pkware.zip-archive"))
        DocumentPicker.Show(B4XPages.GetNativeParent(Me), Null)
        Wait For Picker_Complete (Success As Boolean, URLs As List)
        If Success And URLs.Size > 0 Then
            FileName = URLs.Get(0)
        End If
    #End If
    
    ' Se o usuário cancelar ou não selecionar nada, sai do método
    If FileName = "" Then Return
    
    Log("Success: " & Success)
    Log("Dir: " & Dir)
    Log("FileName: " & FileName)
    
    Log("Copiando arquivo ZIP para o diretório interno")
    
    ' Copia o arquivo selecionado para o diretório interno do app
    Wait For (File.CopyAsync(Dir, FileName, diretorioArquivo, nomeArquivo)) Complete (Success As Boolean)
    Log("Success: " & Success)
    
    Log("Descompactando arquivo ZIP")
    
    ' Instancia a classe de descompactação
    Dim unzip As Archiver
    
    #if b4a
        unzip.AsyncUnZip(diretorioArquivo, nomeArquivo, diretorioArquivo, "unzip")
    #Else b4i
        unzip.AsyncUnzip(diretorioArquivo, nomeArquivo, diretorioArquivo, "", "unzip")
    #End If
    
    ' Aguarda o término da descompactação, com assinatura diferente para cada plataforma
    #if b4a
        Wait For unzip_UnZipDone(CompletedWithoutError As Boolean, NbOfFiles As Int)
    #Else b4i
        Wait For unzip_UnzipDone(CompletedWithoutError As Boolean)
    #End If
    
    ' Verifica o sucesso da operação
    If CompletedWithoutError Then
        Log("unzip descompactado com sucesso em: " & diretorioArquivo)
    Else
        Log("Falha ao descompactar o unzip.")
    End If
    
    ' Lista os arquivos atualmente presentes no diretório interno
    Log("Arquivos no diretório interno:")
    For Each nome As String In File.ListFiles(diretorioArquivo)
        Log(nome)
    Next
    
End Sub
 
Top