一个多年前的压缩解压缩(VCLZIP)函数。

一个多年前的压缩解压缩DLL函数,支持ZIP类型。
控件为VCLZIP3.X,使用了FastMM4。VCLZIP是一个非常不错的压缩控件。
调用示例:
1、压缩单个文件
ZipFolder(sFilePath, '', True, ExtractFileName(sHtmlFileName), sFilePath + sZipFileName, '');
2、压缩文件夹:
ZipFolder(sFilePath, sHtmlFolderName,True, '*.*', sFilePath + sZipFileName, '');
3、解压缩
UnZipFolder(sHtmlTempPath + sFileName, sHtmlTempPath, '');

源码如下:

library ZipFunc;
uses
FastMM4,
SysUtils,
Classes,
VCLUnZip,
VCLZip;
{$R *.res}
/// <summary>
/// 压缩文件夹
/// </summary>
/// <param name="ZipFolder">文件夹目录</param>
/// <param name="RelativePath">相对路径</param>
/// <param name="IsRecurse">是否循环</param>
/// <param name="ZipFileExt">过滤文件后缀名,一般为*.*,如果只压缩单个文件,则为具体的文件名</param>
/// <param name="ZipToFileName">压缩生成的文件名</param>
/// <param name="ZipExclusionExt">不压缩文件的后缀名</param>
/// <returns></returns>
function ZipFolder(ZipFolder:string;
                      RelativePath:string;
                      IsRecurse:Boolean;
                      ZipFileExt:string;
                      ZipToFileName:string;ZipExclusionExt:string):Boolean;stdcall;
var
     sZipFileName:string;
begin
      Result := False;
      with TVCLZip.Create(nil) do
      try
        RecreateDirs := True;
        PackLevel := 9;
        StorePaths := True;
        RootDir := ZipFolder;
        RelativePathList.Add(RelativePath);
        RelativePaths := True;
        //允许多个文件扩展名
        if ZipFileExt<>'' then
        begin
          if Pos(',',ZipFileExt) > 0 then
          begin
            FilesList.Delimiter :=',';
            FilesList.DelimitedText := ZipFileExt;
          end
          else if Pos(';',ZipFileExt) > 0 then
          begin
            FilesList.Delimiter :=';';
            FilesList.DelimitedText := ZipFileExt;
          end
          else
            FilesList.Add(ZipFileExt);
        end;
        Recurse := IsRecurse;//是否循环
        if ZipExclusionExt<>'' then
        begin
          if Pos(',',ZipExclusionExt) > 0 then
          begin
            ExcludeList.Delimiter :=',';
            ExcludeList.DelimitedText := ZipExclusionExt;
          end
          else if Pos(';',ZipExclusionExt) > 0 then
          begin
            ExcludeList.Delimiter :=';';
            ExcludeList.DelimitedText := ZipExclusionExt;
          end
          else
            ExcludeList.Add(ZipExclusionExt);
        end;
        
        sZipFileName := ZipToFileName;
        
        if ExtractFileExt(sZipFileName) = '' then
          sZipFileName := ExtractFileDir(RootDir) + '.Zip';
        ZipName := sZipFileName;
        Zip;
        Result := True;
      finally
        Free;
      end;
end;
function UnZipFolder(
             ZipFileName:string;
             OutPutPath:string;
             ZipExclusionExt:string):Boolean;stdcall;
var
     sOutPutPathName:string;            
begin
     Result := False;
      with TVCLUnZip.Create(nil) do
      try
        OverwriteMode := Always;
        DoAll := True;
        if OutPutPath <> '' then
          DestDir := OutPutPath
        else
          DestDir := ExtractFileDir(ExpandFileName(ZipFileName));
        //OverwriteMode := ;
        //允许多个文件扩展名
        if ZipExclusionExt<>'' then
        begin
          if Pos(',',ZipExclusionExt) > 0 then
          begin
            FilesList.Delimiter :=',';
            FilesList.DelimitedText := ZipExclusionExt;
          end
          else if Pos(';',ZipExclusionExt) > 0 then
          begin
            FilesList.Delimiter :=';';
            FilesList.DelimitedText := ZipExclusionExt;
          end
          else
            FilesList.Add(ZipExclusionExt);
        end;
        ZipName := ZipFileName;
        ReadZip;
        RecreateDirs := True;
        UnZip;
        Result := True;
      finally
        Free;
      end;
end;
exports
     ZipFolder,UnZipFolder;
begin
end.

        
        



        







        
          
            
            评论这张
          
        


          
            
               一个多年前的压缩解压缩(VCLZIP)函数。 - yyimen - yyimen的博客
            
            转发至微博
          
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值