Estou desenvolvendo uma rotina de backup/restore usando as funções hb_ZipFile() e hb_UnzipFile(). Encontrei dificuldades na compilação, mas já consegui superá-las com ajuda aqui do fórum (viewtopic.php?f=4&t=19788). O arquivo .zip está sendo gerado sem problemas, mas para o procedimento de descompactação com a função hb_UnzipFile() não consigo êxito. Esta função sempre retorna .F..
Na única documentação que descreve o uso dos parâmetros (https://harbour.github.io/doc/hbziparc#hb_unzipfile) faz uso da função hb_GetFilesInZip() que não encontrei documentação a respeito!... já fiz várias tentativas mas todas sem sucesso!... Vi aqui no fórum alguns tópicos de dúvidas, tentei aplicar algumas mudanças, mas sem sucesso!... Uso o harbour 3.2!
Alguém poderia me orientar, por favor?!...
A propósito, onde encontro descrição da função hb_GetFilesInZip()?
Abaixo está a função de descompactação:
Código: Selecionar todos
/**
* Restaura um arquivo .zip utilizando funções da hbziparc.lib
*/
FUNCTION FRestore()
Local cPathBkp:="\BK_DBSGC\"
Local aFilesBkp:=DIRECTORY(cPathBkp+"*.zip"), cPassword
Local aFileList:={}, nMaxFNmLen:=0, nFileRestore, cFileRestore, nOpcRestore, aExtract
If !HB_DirExists(cPathBkp)
Alert("Aten‡„o;N„o identificado a pasta de backup:;\BK_DBSGC\",,"Gr+/R")
Return Nil
ElseIf Len(aFilesBkp) = 0
Alert("Aten‡„o;N„o existe arquivo de backup em:;\BK_DBSGC\",,"Gr+/R")
Return Nil
Endif
ASORT( aFilesBkp,,,{ |a1File,a2File| a1File[F_NAME] > a2File[F_NAME] } )
AEVAL( aFilesBkp, { | a1File | nMaxFNmLen := MAX( nMaxFNmLen, LEN( a1File[ F_NAME ] ) ) } )
AEVAL( aFilesBkp, {|a1File| AADD(aFileList, PADR( a1File[ F_NAME ], nMaxFNmLen + 1 )+" "+;
TRAN( a1File[ F_SIZE ]/1000, "@E 999,999,999" )+" "+;
DTOC(a1File[ F_DATE ])+" "+;
a1File[ F_TIME ]+" "+;
a1File[ F_ATTR ] ) } )
nFileRestore:=FselectFile(aFileList)
If nFileRestore = 0
Return Nil
Endif
nOpcRestore:=Alert("Aten‡„o;Selecionado o arquivo:;"+aFilesBkp[nFileRestore,F_NAME]+" para Restore.;"+;
"Prosseguir com restaura‡„o do backup?",{"N„o","Sim"},"Gr+/b")
If nOpcRestore = 2
dbCloseAll()
cFileRestore:=aFilesBkp[nFileRestore,F_NAME]
aExtract := hb_GetFilesInZip( cFileRestore )
If hb_UnzipFile( cFileRestore,; // arquivo zip
,;// {| cFile, nPos | FEvolucao(nPos,cFile,Len(aExtract))},; // Codeblock to execute while extracting
,; // lToggle: Toggle to create directory if needed
,; // cPassword: Password to use to extract files
".\",; // cPath: Path to extract the files to - mandatory
aExtract,; // cFile | aFiles: A File or Array of files to extract - mandatory
,) // pFileProgress: Codeblock for File Progress
Alert("Aviso; Restore realizado com sucesso!")
Else
cTexto:="ERRO; Falha no procedimento de restore!;"
cTexto+="N„o foi possivel descompactar o arquivo de backup:;"
cTexto+=Alltrim(cFileRestore)
Alert(cTexto,,"w+/r")
ENDIF
FloginUser()
Endif
Return Nil
/**
* Selecionar o arquivo para restore
*/
Static FUNCTION FselectFile(aLista)
Local nFile:=0, cScreen:=SaveScreen(3,1,22,79)
Fbox(6,10,17,70,"D","Selecione o arquivo","W+/N")
@ 7,11 Say "Arquivo..................... Tamanho(MB) Data Hora" Color("Gr+/n")
SetColor("w/n,n/w")
nFile:=ACHOICE(8,11,16,69,aLista)
CorStand
RestScreen(3,1,22,79,cScreen)
Return(nFile)
