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