?»??»?unit utFunctions; interface uses WinSock,Windows,SysUtils,Classes,IniFiles,IdHTTP,comobj,ShellAPI,Vcl.Forms, Vcl.Controls,IdHashMessageDigest,System.Zip,Vcl.Dialogs,StrUtils; function zipup(filename,zippath:String):boolean ; function zipuplist(zf:TZipFile;path:String):boolean ; function zipdown(filename:String):boolean ; procedure MakeFileList(Path:string;ADirStrings,AFileStrings:TStrings); implementation procedure MakeFileList(Path:string;ADirStrings,AFileStrings:TStrings); var sch:TSearchrec; s:string; begin if RightStr(Trim(Path), 1) <> '\' then Path := Trim(Path) + '\' else Path := Trim(Path); ADirStrings.Clear; AFileStrings.Clear; if not DirectoryExists(Path) then exit; if FindFirst(Path + '*', faAnyfile, sch) = 0 then begin repeat // Application.ProcessMessages; if ((sch.Name = '.') or (sch.Name = '..')) then Continue; s:=ExtractFileExt(Path+sch.Name); if FileGetAttr(Path+sch.Name)=faDirectory then ADirStrings.Add(Path+sch.Name) else AFileStrings.Add(Path+sch.Name); //Application.ProcessMessages; until FindNext(sch)<>0; FindClose(sch); end; end; function zipuplist(zf:TZipFile;path:String):boolean ; var i:Integer; ADirStrings,AFileStrings:TStrings; begin try ADirStrings:=TStringList.Create; AFileStrings:=TStringList.Create; MakeFileList(path,ADirStrings,AFileStrings); for i:=0 to AFileStrings.Count-1 do begin zf.Add(AFileStrings[i],AFileStrings[i]); end; for i:=0 to ADirStrings.Count-1 do begin zipuplist(zf,ADirStrings[i]); end; ADirStrings.Free ; AFileStrings.Free ; result := true ; except on E: Exception do begin result := false ; end; end; end; function zipup(filename,zippath:String):boolean ; var zf:TZipFile; i:Integer; ADirStrings,AFileStrings:TStrings; begin try ADirStrings:=TStringList.Create; AFileStrings:=TStringList.Create; MakeFileList(zippath,ADirStrings,AFileStrings); zf:=TZipFile.Create; zf.Open(filename,zmWrite); for i:=0 to AFileStrings.Count-1 do begin zf.Add(AFileStrings[i],AFileStrings[i]); end; for i:=0 to ADirStrings.Count-1 do begin zipuplist(zf,ADirStrings[i]); end; zf.Close; zf.Free ; ADirStrings.Free ; AFileStrings.Free ; result := true ; except on E: Exception do begin result := false ; end; end; end; function zipdown(filename:String):boolean ; var zf:TZipFile; i:Integer; begin try zf:=TZipFile.Create; zf.Open(filename,zmRead); for i:=0 to zf.FileCount-1 do begin //ShowMessage(zf.FileName[i]); zf.Extract(zf.FileName[i],ExtractFilePath(zf.FileName[i]),true); end; //zf.ExtractAll(zippath); zf.Close; zf.Free; result := true ; except on E: Exception do begin result := false ; end; end; end; end.