CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  VCL组件开发及应用

delphi中ZLIB的用法(压缩与解压缩)

楼主fxywkj(www.wolfteam.cn技术的路途是孤独、寂寞的,找个路人一起走也许会好点)2004-03-04 08:53:44 在 Delphi / VCL组件开发及应用 提问

下面是我现在用的,但是不能对两个或多个文件同时压缩,请问有没有其他的办法,另外我下载了ZIPTV,可是不能用,请大家帮忙!  
   
   
  unit   u_main;  
   
  interface  
   
  uses  
      Windows,   Messages,   SysUtils,   Variants,   Classes,   Graphics,   Controls,   Forms,  
      Dialogs,   StdCtrls;  
   
   
  type  
   
      TForm1   =   class(TForm)  
   
          Button1:   TButton;  
          Button2:   TButton;  
          Button3:   TButton;  
          Button4:   TButton;  
          procedure   Button1Click(Sender:   TObject);  
          procedure   CompressFile(sSourceFile,sZipFile:   string);  
          procedure   Button2Click(Sender:   TObject);  
          procedure   UnCompressFile(sZipFile,sUnZipFile:   String);  
      private  
          {   Private   declarations   }  
      public  
          {   Public   declarations   }  
      end;  
   
  var  
      Form1:   TForm1;  
   
  implementation  
   
  uses   ZLib;  
   
  {$R   *.dfm}  
   
  procedure   TForm1.Button1Click(Sender:   TObject);  
  begin  
  CompressFile('f:\a.doc','f:\b');  
   
   
      ShowMessage('dd');  
  end;  
   
  procedure   TForm1.CompressFile(sSourceFile,sZipFile:   string);  
   
  var  
        CompressLevel:   TCompressionLevel;  
      SourceFileStream:   TFileStream;  
      CompressStream:   TCompressionStream;  
      MemStream,DestMemStream:   TMemoryStream;  
      Buffer:   PChar;  
      Count,MemSize:   Longint;  
  begin  
      CompressLevel:=   clDefault;  
      try  
          SourceFileStream   :=   TFileStream.Create(sSourceFile,   fmOpenRead);   //打开源文件  
          Count   :=   SourceFileStream.size;                                                                     //读出源文件大小  
          GetMem(Buffer,   Count);  
   
          MemStream   :=   TMemoryStream.Create;  
          DestMemStream   :=   TMemoryStream.Create;  
   
          CompressStream   :=   TCompressionStream.Create(CompressLevel,   DestMemStream);  
          try  
              SourceFileStream.ReadBuffer(Buffer^,   Count);               //将源文件内容读到Buffer中  
              MemStream.WriteBuffer(Buffer^,   Count);                           //将Buffer内容读到MemStream中  
              MemSize   :=   MemStream.Size;                                                   //记录原始文件尺寸  
              MemStream.SaveToStream(CompressStream);                         //将MemStream内容压缩保存在DestMemStream中  
              CompressStream.Free;  
              MemStream.Clear;                                                                       //清空MemStream内容  
              MemStream.WriteBuffer(MemSize,   SizeOf(MemSize));       //写入原始文件尺寸  
              MemStream.CopyFrom(DestMemStream,   0);                             //将压缩过的文件流DestMemStream内容拷贝到MemStream中  
              MemStream.SaveToFile(sZipFile);                                         //将MemStream内容写到文件  
              showmessage('successful!')  
              //result   :=   true;  
          finally  
              FreeMem(Buffer);  
              MemStream.Free;     DestMemStream.Free;     SourceFileStream.Free;  
          end;  
      except  
            showmessage('failed!')  
          //result   :=   false;  
      end;  
  end;  
  //===============================解压缩函数====================================================  
  procedure   TForm1.UnCompressFile(sZipFile,sUnZipFile:   String);  
  var  
      ZipStream:   TFileStream;  
      MemStream:   TMemoryStream;  
      DecompressStream:   TDecompressionStream;  
      Buffer:   PChar;  
      Count:   Longint;  
  begin  
      try  
          ZipStream   :=   TFileStream.Create(sZipFile,   fmOpenRead);   //打开压缩文件  
          ZipStream.ReadBuffer(Count,   SizeOf(Count));                         //将压缩文件的原始尺寸读到Count中  
          GetMem(Buffer,   Count);                                                                   //根据文件的原始尺寸大小给Buffer分配空间  
   
          MemStream   :=   TMemoryStream.Create;  
          DecompressStream   :=   TDecompressionStream.Create(ZipStream);  
          try  
              DecompressStream.ReadBuffer(Buffer^,   Count);                   //将文件解压缩到Buffer中  
              MemStream.WriteBuffer(Buffer^,   Count);                               //将Buffer内容写到MemStream中  
              MemStream.SaveToFile(sUnZipFile);                                         //将MemStream写到文件  
            //   result   :=   true;  
            showmessage('successful');  
          finally  
              FreeMem(Buffer);  
              DecompressStream.Free;         MemStream.Free;         ZipStream.Free;  
          end;  
      except  
          //result   :=   false;  
          showmessage('failed');  
      end;  
  end;  
   
   
   
  procedure   TForm1.Button2Click(Sender:   TObject);//调用解压缩  
  begin  
      UnCompressFile('f:\b','f:\b.doc');  
  end;  
   
  end. 问题点数:20、回复次数:3Top

相关问题

  • 求BCB压缩,及用法。
  • 怎样压缩一个目录?我用的是delphi自带的压缩zlib
  • 高手请留步,关于delphi 的zlib用法,请指教,着急呀!
  • 如何解压 用delphi中zlib 压缩的数据
  • Delphi 中LPtpDP,DPtoLP的用法
  • delphi语法---stored的用法
  • delphi语法---class of AClass用法
  • 有谁用过delphi自带的zlib单元做过压缩程序?
  • Zlib解压缩问题?
  • linux下的zlib压缩

关键词

  • 文件
  • 内容
  • memstream
  • destmemstream
  • 压缩
  • compressstream
  • sourcefilestream
  • szipfile
  • compresslevel
  • ssourcefile

得分解答快速导航

  • 帖主:fxywkj

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo