Vclzip控件主要的類爲TVclUnZip 和TVclZip 其中,TVclZip繼承自TVclUnZip。
網上的轉帖用法:ruby
function Zip(ZipMode,PackSize:Integer;ZipFile,UnzipDir:String):Boolean; //壓縮或解壓縮文件 var ziper:TVCLZip; begin //函數用法:Zip(壓縮模式,壓縮包大小,壓縮文件,解壓目錄) //ZipMode爲0:壓縮;爲1:解壓縮 PackSize爲0則不分包;不然爲分包的大小 try if copy(UnzipDir, length(UnzipDir), 1) = '\' then UnzipDir := copy(UnzipDir, 1, length(UnzipDir) - 1); //去除目錄後的「\」 ziper:=TVCLZip.Create(application); //建立zipper ziper.DoAll:=true; //加此設置將對分包文件解壓縮有效 ziper.OverwriteMode:=Always; //老是覆蓋模式 if PackSize<>0 then begin //若是爲0則壓縮成一個文件,不然壓成多文件 ziper.MultiZipInfo.MultiMode:=mmBlocks; //設置分包模式 ziper.MultiZipInfo.SaveZipInfoOnFirstDisk:=True; //打包信息保存在第一文件中 ziper.MultiZipInfo.FirstBlockSize:=PackSize; //分包首文件大小 ziper.MultiZipInfo.BlockSize:=PackSize; //其餘分包文件大小 end; ziper.FilesList.Clear; ziper.ZipName := ZipFile; //獲取壓縮文件名 if ZipMode=0 then begin //壓縮文件處理 ziper.FilesList.Add(UnzipDir+'\*.*'); //添加解壓縮文件列表 Application.ProcessMessages; //響應WINDOWS事件 ziper.Zip; //壓縮 end else begin ziper.DestDir:= UnzipDir; //解壓縮的目標目錄 ziper.UnZip; //解壓縮 end; ziper.Free; //釋放壓縮工具資源 Result:=True; //執行成功 except Result:=False;//執行失敗 end; end;
製做帶目錄結構的壓縮指定目錄:app
function AddZipFile(ZipFileName,FileName:pchar):integer;stdcall; var ziper:TVclZip; begin result:=0; try try ziper:=TVclZip.Create(nil); ziper.OverwriteMode:=Always;//老是覆蓋 ziper.DoAll:=true;//壓縮全部文件 ziper.RelativePaths:=true;//是否保持目錄結構 ziper.AddDirEntriesOnRecurse:=true; ziper.RecreateDirs:=true;//建立目錄 ziper.StorePaths:=true;//保存目錄信息 //ziper.Recurse:=true; except exit; end; if FileExists(StrPas(ZipFileName)) then begin if UnZipFile(ZipFileName,TempDir)=1 then begin ziper.FilesList.Add(TempDir+StrPas(ZipFileName)+'\*.*'); ziper.FilesList.Add(StrPas(FileName)); ziper.ZipName:=strpas(ZipFileName); ziper.Zip; result:=1; end; end else begin ziper.FilesList.Add(FileName); ziper.ZipName:=StrPas(ZipFileName); ziper.zip; result:=1; end; finally ziper.Free; end;
把指定目錄(帶子目錄)的全部文件壓縮到一個目錄下:函數
function AddDirAll(Dir,ZipFileName:pchar):integer;stdcall; var Ziper:TVclZip; FileRec: TSearchrec; TempDir:String; begin if FindFirst(Strpas(Dir),faAnyFile,FileRec) = 0 then begin repeat if (FileRec.Attr and faDirectory) <> 0 then begin TempDir:=StrPas(Dir)+'\'+FileRec.Name; AddDirAll(PChar(TempDir),ZipFileName); end; if (FileRec.Attr and faAnyFile )<> 0 then begin result:=AddZipFile(ZipFileName,Pchar(TempDir+'\*.*')); end; until FindNext(FileRec) <> 0 ; end end;