如题

解决方案 »

  1.   

    调用压缩程序(如winzip/winrar)命令行方式,动态生成所需参数即可
      

  2.   

    使用组件VCLZIP,这样不需要别的程序支持
      

  3.   

    Java也可以!而且压缩率比原来的zip压缩还要大
      

  4.   

    我不想使用命令行的方式,因为这需要系统事先装winzip等软件,有没有其它方法?VCLZIP不是DELPHI自带的吧?到哪里找它呢?使用时会不会有限制,或是我不想看到的提示界面?
      

  5.   

    哎,有替别人做广告了。你可以去http://www.pigtwo.com/CtrlData/CtrlData.htm下载。
      

  6.   

    有没有调用DLL,在程序里面压缩的?
      

  7.   

    下面是我项目中的一段代码,
    用的是VCLZip。
    请看一下吧。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;