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 := ;
  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.

最新文章

  1. iOS NSOperation 异步加载图片 封装NSOperation 代理更新
  2. WP8微信5.3开始内测 支持Cortana语音 两微破冰了?
  3. Javascript函数(定义、传值、重载)
  4. 转:Android官方MVP架构示例项目解析
  5. python学习笔记--Django入门四 管理站点
  6. WebService之Soap头验证入门
  7. 【TCP/IP 协议】 TCP/IP 基础
  8. vue项目如何刷新当前页面
  9. 二维条码扫描模组在肯德基KFC的无纸化点餐解决方案
  10. 2018面向对象程序设计(java)课程学习进度条
  11. Spark环境搭建(四)-----------数据仓库Hive环境搭建
  12. Rancher之Pipeline JAVA demo
  13. LevelDB源码分析-TableBuilder生成sstable
  14. java多线程系列17 ThreadLocal
  15. Mongodb嵌套文档的改动-利用数组改动器更新数据
  16. JavaScript监听手机物理返回键的两种解决方法
  17. 模式识别之检索---Bag of visual word(词袋模型)
  18. sping mvc+uploadify 上传文件大小控制3部曲
  19. 如何在前端项目中引用bootstrap less?
  20. split命令详解

热门文章

  1. jquery -----简单分页
  2. PC网页js调用本地应用程序
  3. Eclipse的调试功能(转)(让Eclipse也能有VS的即时窗口那样的即时代码调试功能)
  4. SQL SERVER 技术博客 外文
  5. 【spring boot】10.spring boot下的单元测试
  6. 使用Eclipse Memory Analyzer进行内存泄漏分析三部曲
  7. ThinkPHP3.1 模板布局
  8. tensorflow 运行 python convolutional.py时
  9. Flutter开发记录part3
  10. Cocos2d-x 3.0 屏幕触摸及消息分发机制