Antes da troca de ficheiros (por e-mail, por exemplo), comprimimo-los frequentemente para reduzir o seu tamanho antes de os transmitir. Com 4D v18, pode comprimir e descomprimir os seus ficheiros através da programação sem necessidade de bibliotecas ou ferramentas externas. Aqui estão os novos comandos que lhe permitem fazê-lo:
Comprimir ficheiros e pastas
O novo Zip Create archive permite criar um arquivo zip passando ou um ficheiro, uma pasta, ou um objecto com parâmetros(por exemplo, uma palavra-passe para ler o arquivo).
Comprimir um ficheiro:
C_OBJECT($file;$destination)
$destination :=Folder(fk desktop folder).file("MyDocs/file.zip")
$file :=Folder(fk desktop folder).file("MyDocs/text.txt")
ZIP Create archive ($file;$destination)
Comprimir uma pasta:
C_OBJECT($folder;$destination)
$destination :=Folder(fk desktop folder).file("MyDocs/Images.zip")
$folder :=Folder(fk desktop folder).folder("MyDocs/Images")
ZIP Create archive ($folder;$destination)
Comprimir com uma palavra-passe e uma barra de progresso:
C_OBJECT($zip)
$destination :=Folder(fk desktop folder).file("MyDocs/Archive.zip")
$zip :=New object
$zip .files:=Folder(fk desktop folder).folder("MyDocs/Resources").folders()
$zip .password:="password"
$zip .callback:=Formula(FormulaCompressing ($1)))
progID :=Progress New
ZIP Create archive (
$zip;$destination)
Progress QUIT (progID)
O método FormulaCompressing:
Progress SET PROGRESS (progID;Num($1/100))
Descomprimir ficheiros e pastas
Um novo comando ZIP Read archive devolve um objecto de arquivo. Ao manipular este objecto, pode facilmente obter a lista de ficheiros dentro do arquivo, extrair um determinado ficheiro, ou extrair o arquivo inteiro, etc.
Leia o conteúdo do arquivo
C_OBJECT($archive;$path)
)
$path :=Folder(fk desktop folder).file("MyDocs/Archive.zip")
$archive :=ZIP Read archive($path
Recuperar a lista de ficheiros e pastas
$folders:=$archive.root.folders()
$files :=$archive.root.files()
Ler o conteúdo de um ficheiro sem extracção
If ($files[$i].extension=".txt")
$txt :=$files[$i].getText()
Else
$blob :=$files[$i].getContent()
End if
Extracto de ficheiro do arquivo
$folderResult:=$files[$i].copyTo(Folder(fk desktop folder).folder("MyDocs"))
Extrair todos os ficheiros
$folderResult:=$archive.root.copyTo(Folder(fk desktop folder).folder("MyDocs"))