文档章节

关于 Delphi 中流的使用(8) 压缩与解压缩的函数

涂孟超
 涂孟超
发布于 2014/09/26 15:36
字数 217
阅读 2
收藏 0
点赞 0
评论 0
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;

//压缩函数
procedure Zip(var fs: TMemoryStream);
var
  cs: TCompressionStream;
  ms: TMemoryStream;
  num: Integer;
begin
  if not(Assigned(fs) and (fs.Size>0)) then Exit;

    num := fs.Size;
    ms := TMemoryStream.Create;
    cs := TCompressionStream.Create(clMax, ms);
  try
    fs.SaveToStream(cs);
    cs.Free;
    //ms.Position := 0;
    fs.Clear;
    fs.WriteBuffer(num, sizeof(num));
    fs.CopyFrom(ms, 0);
  finally
    ms.Free;
  end;
end;

//解压函数
procedure UnZip(var fs: Tmemorystream);
var
  ds: TDecompressionStream;
  ms: TMemoryStream;
  num: Integer;
begin
  if not(Assigned(fs) and (fs.Size>0)) then Exit;

  fs.Position := 0;
  fs.ReadBuffer(num,sizeof(num));
  ms := TMemoryStream.Create;
  ds := TDecompressionStream.Create(fs);
  try
    ms.SetSize(num);
    ds.Read(ms.Memory^, num);
    //ms.Position := 0;
    fs.Clear;
    fs.CopyFrom(ms, 0);
  finally
    ds.Free;
    ms.Free;
  end;
end;


//压缩测试
procedure TForm1.Button1Click(Sender: TObject);
var
  ms: TMemoryStream;
begin
  ms := TMemoryStream.Create;
  ms.LoadFromFile('c:\temp\test.txt');
  Zip(ms);
  ms.SaveToFile('c:\temp\test.zipx');
end;

//解压测试
procedure TForm1.Button2Click(Sender: TObject);
var
  ms: TMemoryStream;
begin
  ms := TMemoryStream.Create;
  ms.LoadFromFile('c:\temp\test.zipx');
  UnZip(ms);
  ms.SaveToFile('c:\temp\test2.txt');
end;

end.

 
 
 
 
 

 

 

  

本文转载自:http://www.cnblogs.com/del/archive/2008/01/02/1023195.html

共有 人打赏支持
涂孟超
粉丝 12
博文 2004
码字总数 14107
作品 0
深圳
程序员
SQLite for Delphi的网友评论

SQLite的一个Delphi的开源封装库,全面支持Delphi 4, 5, 6, 7, 2005 和 2006。对于Delphi 4和Delphi 5请使用带有D4、D5后缀的文件。解压缩下载回来的文件包到Delphi的子目录下,安装该组件,...

红薯 ⋅ 2009/12/11 ⋅ 2

SQLite for Delphi

SQLite的一个Delphi的开源封装库,全面支持Delphi 4, 5, 6, 7, 2005 和 2006。对于Delphi 4和Delphi 5请使用带有D4、D5后缀的文件。解压缩下载回来的文件包到Delphi的子目录下,安装该组件,...

匿名 ⋅ 2008/10/06 ⋅ 1

关于文件操作集锦 delphi

关于文件操作集锦 取得该快捷方式的指向EXE 关键词:快捷方式 LNK unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCt......

vga ⋅ 2014/04/23 ⋅ 0

ZIP文件格式详解

ZIP文件的总体格式 分文件头信息+文件压缩数据 中心目录+中心目录记录结束符 1.分文件头信息: 字节数 描述 4 分文件头信息标志(0x04034b50) 2 解压缩所需版本 2 通用比特标志位(置比特0位=加...

壶漏子 ⋅ 2015/10/09 ⋅ 0

使用 XZ Utils 获得更高的压缩率

关于 XZ Utils XZ Utils 是为 POSIX 平台开发具有高压缩率的工具。它使用 LZMA2 压缩算法,生成的压缩文件比 POSIX 平台传统使用的 gzip、bzip2 生成的压缩文件更小,而且解压缩速度也很快。...

nothingfinal ⋅ 2013/03/31 ⋅ 0

C++小项目 — 基于huffman压缩算法的文件压缩项目

基于huffman压缩算法的文件压缩项目 今天我们来看看一个小项目基于huffman压缩算法的文件压缩项目.这个项目很简单就是使用我们自己实现的堆和huffman树,然后开始着手来对文件里 面的内容进行...

Dawn_sf ⋅ 01/04 ⋅ 0

开发手记OSSC-阿里云开发存储服务(OSS)的C SDK

OSSC(Aliyun Open Storage Service C SDK)是我和实验室@王维同学在2012首届阿里云开发者大赛中的参赛项目(http://2012.aliyun.com),我们作品提交是在10月2号,但是11月8号才揭晓最终结果...

大卷卷 ⋅ 2012/10/22 ⋅ 0

Expressbody-parser(四)

常用API 1. bodyParser.text(options) 解析文本格式 返回一个仅处理字符串格式处理的中间件。其后的所有的req.body中将会是一个字符串值。 1. defaultCharset - 如果Content-Type后没有指定编...

博为峰教研组 ⋅ 2016/11/23 ⋅ 0

FAQ:关于aspspider.net的申请与使用(逐渐整理中)

根据网友的提问,我整理了一份简单的FAQ,今后根据需要会持续更新的。 Q:如何申请免费的aspspider.net空间 一个支持asp.net2.0和Sql server及Access的免费空间 Q:如何上传超过2M的文件? A:...

小麋鹿666 ⋅ 2017/12/12 ⋅ 0

CNNVD 关于手机程序第三方解压缩库输入验证安全漏洞情况的通报

  近日,国家信息安全漏洞库(CNNVD)收到关于手机程序第三方解压缩库输入验证安全漏洞(CNNVD-201805-440)情况的报送。成功利用该漏洞的攻击者,可以远程读取应用数据、甚至执行任意代码...

FreeBuf ⋅ 05/23 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

从零开始搭建Risc-v Rocket环境---(1)

为了搭建Rocke环境,我买了一个2T的移动硬盘,安装的ubuntu-16.04 LTS版。没有java8,gcc是5.4.0 joe@joe-Inspiron-7460:~$ java -version程序 'java' 已包含在下列软件包中: * default-...

whoisliang ⋅ 23分钟前 ⋅ 0

大数据学习路线(自己制定的,从零开始学习大数据)

大数据已经火了很久了,一直想了解它学习它结果没时间,过年后终于有时间了,了解了一些资料,结合我自己的情况,初步整理了一个学习路线,有问题的希望大神指点。 学习路线 Linux(shell,高并...

董黎明 ⋅ 29分钟前 ⋅ 0

systemd编写服务

一、开机启动 对于那些支持 Systemd 的软件,安装的时候,会自动在/usr/lib/systemd/system目录添加一个配置文件。 如果你想让该软件开机启动,就执行下面的命令(以httpd.service为例)。 ...

勇敢的飞石 ⋅ 31分钟前 ⋅ 0

mysql 基本sql

CREATE TABLE `BBB_build_info` ( `community_id` varchar(50) NOT NULL COMMENT '小区ID', `layer` int(11) NOT NULL COMMENT '地址层数', `id` int(11) NOT NULL COMMENT '地址id', `full_......

zaolonglei ⋅ 40分钟前 ⋅ 0

安装chrome的vue插件

参看文档:https://www.cnblogs.com/yulingjia/p/7904138.html

xiaoge2016 ⋅ 43分钟前 ⋅ 0

用SQL命令查看Mysql数据库大小

要想知道每个数据库的大小的话,步骤如下: 1、进入information_schema 数据库(存放了其他的数据库的信息) use information_schema; 2、查询所有数据的大小: select concat(round(sum(da...

源哥L ⋅ 今天 ⋅ 0

两个小实验简单介绍@Scope("prototype")

实验一 首先有如下代码(其中@RestController的作用相当于@Controller+@Responsebody,可忽略) @RestController//@Scope("prototype")public class TestController { @RequestMap...

kalnkaya ⋅ 今天 ⋅ 0

php-fpm的pool&php-fpm慢执行日志&open_basedir&php-fpm进程管理

12.21 php-fpm的pool pool是PHP-fpm的资源池,如果多个站点共用一个pool,则可能造成资源池中的资源耗尽,最终访问网站时出现502。 为了解决上述问题,我们可以配置多个pool,不同的站点使用...

影夜Linux ⋅ 今天 ⋅ 0

微服务 WildFly Swarm 管理

Expose Application Metrics and Information 要公开关于我们的微服务的有用信息,我们需要做的就是将监视器模块添加到我们的pom.xml中: 这将使在管理和监视功能得到实现。从监控角度来看,...

woshixin ⋅ 今天 ⋅ 0

java连接 mongo伪集群部署遇到的坑

部署mongo伪集群 #创建mongo数据存放文件地址mkdir -p /usr/local/config1/datamkdir -p /usr/local/config2/data mkdir -p /usr/local/config3/data mkdir -p /usr/local/config1/l......

努力爬坑人 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部