频道分类

Delphi VCLZip实现分卷压缩

作者:admin 来源: 日期:2019/10/12 23:33:35 人气: 标签:

 
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;