Ola
Eu uso assim.
Incluir estas Libs, hbziparc.lib + hbmzip.lib + minizip.lib + hbzlib.lib para funcionar a senha
se não usar senha só esta ziparchive.lib
#include "minigui.ch"
*-----------------------------
Function MAIN()
*-----------------------------
Public cBase:= 'c:\WinMenu\'
SET CENTURY ON
SET DATE ANSI
SET ShowDetailError ON
SET DELETED ON
SET BROWSESYNC ON
DEFINE WINDOW Form_Backup ;
AT 0,0 ;
WIDTH 280 HEIGHT 200 ;
TITLE 'Acesso ao Sistema de Backup' ;
MAIN NOSYSMENU BACKCOLOR BLUE
@ 10, 30 PROGRESSBAR Progress_1 RANGE 0, 80 WIDTH 200 HEIGHT 26
@ 50, 30 PROGRESSBAR Progress_2 RANGE 0, 100 WIDTH 200 HEIGHT 26
@ 85, 30 LABEL label_1 VALUE '';
WIDTH 200 HEIGHT 24 ;
BACKCOLOR BLUE FONTCOLOR WHITE BOLD
@ 120, 85 BUTTON Bt_Login ;
CAPTION '&Backup' ;
ACTION { || F_Backup()} ;
FONT "MS Sans Serif" SIZE 09 FLAT
End WINDOW
DoMethod("Form_Backup","Bt_Login","SetFocus")
CENTER WINDOW Form_Backup
ACTIVATE WINDOW Form_Backup
Return Nil
**********************************************
Function F_Backup()
local aDiri := Directory(cBase + "*.*")
local afiles:= {}, x
For x:= 1 To Len(aDiri)
If Upper(SubStr(aDiri[x, 1], -3)) == 'DBF' .Or. Upper(SubStr(aDiri[x, 1], -3)) == 'FPT'
AAdd(afiles, cBase + aDiri[x, 1])
EndIf
Next
Form_Backup.Progress_1.Value := 0
Form_Backup.Progress_2.RangeMax:= Len(afiles)
COMPRESS afiles ;
TO 'KipDbf.Zip' ;
BLOCK {|cFile,nPos| ProgressUpdate(nPos, cFile) } ;
LEVEL 8 ;
PASSWORD '[D1a2N3i4E5l6]' ;
OVERWRITE ;
FILEPROGRESS {|nPos, nTotal| ProgressFile(nPos, nTotal) }
Form_Backup.Release
Return nil
**********************************
Static Function ProgressUpdate( nPos, cFile )
Form_Backup.Progress_1.Value:= nPos
Form_Backup.Label_1.Value := TokenUpper(Lower(cFileNoPath(cFile)))
Return Nil
**********************************
Static Function ProgressFile(nPos, nTotal)
Form_Backup.Progress_2.Value:= ( nPos / nTotal ) * 100
Return Nil