zoukankan      html  css  js  c++  java
  • FreePascal

    开发工具:Typhon32

    Abbrevia版本:6.9.1

    Abbrevia对于Delphi程序员来说,无须多言,是大名鼎鼎的压缩和解压缩控件,下面是它的介绍:

    http://tpabbrevia.sourceforge.net/

    我写了两个函数,分别对应压缩和解压缩:

    A,压缩:

         1,压缩目录:可以压缩多级目录。

         2,压缩文件:将指定的文件压缩。

    B,解压缩:

        1,解压缩目录:对压缩文件是目录的压缩文件,解压缩到指定的目录中,并且将保持压缩前的目录结构。

        2,解压缩文件:对压缩文件就是单个文件的压缩文件,解压缩到指定的文件。

    下面是完整,经过认真测试的代码:

    uses  
      {压缩控件用单元}
      AbBrowse, AbZBrows, AbZipper, AbUnzper,
      AbArcTyp//它是TAbZipper各种属性的单元文件
      ;
    {
      压缩目录或指定的文件
      参数:
      Password:压缩用密码
      inputParam:要压缩目录名称或文件名
      zipFileName:生成的压缩文件名称
      isZipDir:是否压缩目录(true:目录;false:文件)
    }
    function AbZip(zipPassword, inputParam, zipFileName: string; isZipDir: boolean = False): boolean;
    var
      isSuccess: boolean;  //是否压缩成功的布尔值
      AbZipper1: TAbZipper;//压缩对象
    begin
    
      isSuccess := True; // 是否压缩成功默认值为true
    
      try
    
        // 创建压缩对象
        AbZipper1 := TAbZipper.Create(nil);
    
        try
          with AbZipper1 do
          begin
    
            Password := ansistring(trim(zipPassword)); // 设置压缩密码
    
            //压缩目录
            if isZipDir = True then
            begin
              StoreOptions := [soRecurse]; //注意:soRecurse决定压缩子目录,不要添加其它属性了!!
              BaseDirectory := trim(inputParam); // 设置压缩文件所在目录
              FileName := trim(zipFileName); // 设置要生成的压缩文件名
              AddFiles('*.*', 0); // 压缩全部文件
            end
            else //压缩单个文件
            begin
              BaseDirectory := ExtractFilePath(inputParam); // 设置压缩文件所在目录(从当前要压缩文件中抽取)
              FileName := trim(zipFileName); // 设置要生成的压缩文件名
              AddFiles(ExtractFileName(inputParam), 0); // 压缩指定的文件(从当前要压缩文件中抽取)
            end;
    
            CloseArchive;
          end;
        except
          on e: Exception do
          begin
            isSuccess := False;
          end;
        end;
      finally
        AbZipper1.Free; //释放创建的对象
      end;
    
      Result := isSuccess;
    end;
    
    {
      解压缩文件到指定的目录或指定的文件
      参数:
      Password:解压缩用密码
      inputParam:存放解压缩文件的目录或解压缩后的文件名
      zipFileName:要解压缩的文件名称
      isUnZipToDir:是否解压缩文件到目录(true:解压缩到目录;false:解压缩到指定的文件)
    }
    function AbUnZip(zipPassword, inputParam, zipFileName: string; isUnZipToDir: boolean = False): boolean;
    var
      isSuccess: boolean; // 是否解压缩成功的布尔值
      AbUnZipper1: TAbUnZipper;//解压缩对象
    begin
    
      isSuccess := True; // 是否解压缩成功的布尔值默认值为true
    
      try
    
        // 创建解压缩控件
        AbUnZipper1 := TAbUnZipper.Create(nil);
    
        try
    
          // 把指定目录压缩成文件
          with AbUnZipper1 do
          begin
            Password := ansistring(trim(zipPassword)); // 设置解压缩密码
    
            //解压缩到目录
            if isUnZipToDir = True then
            begin
    
              //把压缩文件中的多层目录一起解压缩成压缩前的目录结构
              ExtractOptions := [eoCreateDirs, eoRestorePath];
    
              //如果解压缩文件存放的目录不存在,则创建
              BaseDirectory := trim(inputParam); // 设置解压缩文件存放的目录
              if DirectoryExists(BaseDirectory) = False then
              begin
                CreateDir(BaseDirectory);
              end;
    
              FileName := trim(zipFileName); // 设置要被解压缩的文件名
              ExtractFiles('*.*'); // 解压缩文件
            end
            else  //解压缩到文件
            begin
              BaseDirectory := ExtractFilePath(inputParam); // 设置解压缩文件存放的目录
              //如果解压缩文件存放的目录不存在,则创建
              if DirectoryExists(BaseDirectory) = False then
              begin
                CreateDir(BaseDirectory);
              end;
    
              FileName := trim(zipFileName); // 设置要被解压缩的文件名
              ExtractFiles('*.*'); // 解压缩文件
            end;
    
            CloseArchive;
          end;
        except
          on e: Exception do
          begin
            isSuccess := False;
          end;
        end;
      finally
        AbUnZipper1.Free;  //释放解压缩对象
      end;
    
      Result := isSuccess;
    end;                     

    good lucky !!

  • 相关阅读:
    一次数据库的整理的sql语句
    网页交互及xml的一些属性对程序的影响
    google编程挑战赛Round1的前两道题
    修改Windows帐户密码,导致Sql Server 2000无法启动。
    在虚拟主机中无法实现缩放等交互
    动态控件创建的一些经验
    文章
    如何解决 SQL Server 2000 中的连接问题
    待看
    I帧,P帧,B帧简介
  • 原文地址:https://www.cnblogs.com/sunylat/p/13605154.html
Copyright © 2011-2022 走看看