Delphi-VclZip用法詳解

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;
相關文章
相關標籤/搜索