关于 Delphi 中流的使用(7) 压缩与解压缩(TCompressionStream、TDecompressionStream)

转载 2016年06月02日 10:48:33
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses Zlib; {压缩流 TCompressionStream 与解压缩流 TDecompressionStream 来自 Zlib 单元}


//压缩
procedure TForm1.Button1Click(Sender: TObject);
var
  cs: TCompressionStream; {定义压缩流}
  fs,ms: TMemoryStream;   {fs 是要压缩的流; ms 是接收压缩后文件的流}
  num: Integer;           {原始文件大小}
begin
  {第一步: 调入要压缩的文件, 并获取大小}
  fs := TMemoryStream.Create;
  fs.LoadFromFile('c:\temp\test.txt'); {文件要存在啊}
  num := fs.Size;

  {第二步: 建立接收的流, 并先写入原始文件大小}
  ms := TMemoryStream.Create;
  ms.Write(num, SizeOf(num));

  {第三步: 压缩}
  cs := TCompressionStream.Create(clMax, ms); {参数1是压缩比; 参数2是接收流}
  fs.SaveToStream(cs); {传入要压缩的数据}
  cs.Free;             {压缩流 Free 后才真正完成压缩, 所以提前 Free}

  {第四步: 保存}
  ms.SaveToFile('c:\temp\test.zipx');

  {第五步: 释放}
  ms.Free;
  fs.Free;

{压缩比参数:
  clNone    无压缩
  clFastest 快速
  clDefault 默认
  clMax     最大比例
}
end;


//解压缩
procedure TForm1.Button2Click(Sender: TObject);
var
  ds: TDecompressionStream; {解压流}
  fs,ms: TMemoryStream;     {fs 是准备要解压的流; ms 是接受解压数据的流}
  num: Integer;             {接受文件压缩前的大小}
begin
  {第一步: 准要解压的文件}
  fs := TMemoryStream.Create;
  fs.LoadFromFile('c:\temp\test.zipx'); {必须是上一个压缩方法生成的文件}

  {第二步: 读出文件压缩前的大小}
  fs.Position := 0;
  fs.ReadBuffer(num,SizeOf(num));

  {第三步: 准备好要接收的流, 并设置需要的大小}
  ms := TMemoryStream.Create;
  ms.SetSize(num);

  {第四步: 解压}
  ds := TDecompressionStream.Create(fs); {参数是要解压的流}

  {第五步: 把解压后的数据读出存放到已准备好接收的流}
  ds.Read(ms.Memory^, num);

  {第六步: 保存}
  ms.SaveToFile('c:\temp\test2.txt');

  ds.Free;
  ms.Free;
  fs.Free;
end;

end.

Delphi压缩流和解压流的应用

软件开发者不免都要遇到压缩数据的问题!经常使用Delphi的朋友都知道,它为我们提供了两个流类(TCompressionStream和TDecompressionStream)来完成数据的压缩和解压缩...
  • mpg2012
  • mpg2012
  • 2013年09月09日 09:57
  • 2086

Delphi XE2 新增 System.Zip 单元,压缩和解压缩文件

Delphi XE2 新增 System.Zip 单元, 可用一句话压缩整个文件夹了 单元内主要就是 TZipFile 类, 最方便使用的是它的类方法: TZipFile.ExtractZip...
  • sunylat
  • sunylat
  • 2013年06月23日 09:47
  • 3956

delphi压缩与解压_不需要特别的控件

delphi压缩与解压,比较简单,也比较实用,对我来说已经足够,我只想让客户端下载一个压缩文件到本地后解压出来就行,看网上有用什么控件的,我的是delphi6没装那控件,在公司管的比较严,要装控件比较...
  • hnbcjzj
  • hnbcjzj
  • 2012年09月12日 20:28
  • 9466

用delphi实现rar文件的解压的方法

准备工作     下载winrar提供的动态链接库unrar.dll     http://www.rarlab.com/rar/UnRARDLL.exe(需解压)     下载为delphi提供的组...
  • zjtxxjd
  • zjtxxjd
  • 2008年08月23日 14:39
  • 1660

真正好用的delphi gzip解压代码

procedure DecompressGZip(AInStream, AOutStream: TStream); var   pb1, pb2: Byte; begin   AInStrea...
  • shixueli
  • shixueli
  • 2015年10月09日 17:04
  • 1826

Delphi实现Zip压缩/解压缩

  • 2013年06月06日 13:52
  • 5.11MB
  • 下载

delphi中基于内存流压缩和解压多个文件的经验

今天在工作中需要解决这样一个问题:压缩和解压一个文件,其中所有的过程都是基于内存中进行的。因为这个原因,基本的压缩工作比如说ZIPLIB等都不能使用。后来从网上找到了这样一段代码。procedure ...
  • gudujianxiaowj
  • gudujianxiaowj
  • 2011年06月26日 11:38
  • 1614

Delphi exe 压缩工具

  • 2011年05月14日 11:08
  • 629KB
  • 下载

Delphi 的 7zip 压缩算法

(********************************************************************************) (*              ...
  • warrially
  • warrially
  • 2012年10月04日 17:51
  • 6472

使用zlib实现gzip格式数据的压缩和解压

注意代码中的注释部分,这里设置是专门针对gzip的,缺少了就不行了,gzip压缩格式和其他格式的区别就在这里。 Bytef 就是 unsigned char,uLong就是 unsigned lon...
  • chary8088
  • chary8088
  • 2015年08月28日 09:55
  • 5234
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于 Delphi 中流的使用(7) 压缩与解压缩(TCompressionStream、TDecompressionStream)
举报原因:
原因补充:

(最多只允许输入30个字)