Delphi7 流操作_压缩
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
btn1: TButton;
btn2: TButton;
edt1: TEdit;
btn3: TButton;
btn4: TButton;
procedure btn1Click(Sender: TObject);
procedure btn2Click(Sender: TObject);
procedure btn3Click(Sender: TObject);
procedure btn4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
uses Zlib;//delphi7 自带这Zlib.pas
//压缩
procedure TForm1.btn1Click(Sender: TObject);
var
cs:TCompressionStream;
fs,ms:TMemoryStream;
num:Integer;
begin
{第一步: 调入要压缩的文件, 并获取大小}
fs:=TMemoryStream.Create;
fs.LoadFromFile('a.fr3');
num:=fs.Size;
{第二步: 建立接收的流, 并先写入原始文件大小}
ms:=TMemoryStream.Create;
ms.Write(num,SizeOf(num));
{第三步: 压缩}
cs:=TCompressionStream.Create(clMax,ms); //压缩比例最大化,ms为接受流
fs.SaveToStream(cs); //保存流到压缩流
cs.Free; {压缩流 Free 后才真正完成压缩, 所以提前 Free}
ms.SaveToFile('a.zipx'); //delphi通过zlib压缩后生成的文件,winnar解压不了
ms.Free;
fs.Free;
end;
//解压缩
procedure TForm1.btn2Click(Sender: TObject);
var
ds: TDecompressionStream; {解压流}
fs,ms: TMemoryStream; {fs 是准备要解压的流; ms 是接受解压数据的流}
num: Integer; {接受文件压缩前的大小}
begin
{第一步: 准要解压的文件}
fs := TMemoryStream.Create;
fs.LoadFromFile('a.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('b.fr3');
ds.Free;
ms.Free;
fs.Free;
end;
//序列化
procedure TForm1.btn3Click(Sender: TObject);
var
stream:TStream;
const
path='m.dat';
begin
stream:=TFileStream.Create(path,fmCreate);
stream.WriteComponentRes(edt1.ClassName,edt1); //写入资源到文件,edt1.ClassName可以为'xxx'等,可以随便命名
stream.Free;
end;
//反序列化
procedure TForm1.btn4Click(Sender: TObject);
var
stream:TStream;
const
path='m.dat';
begin
stream:=TFileStream.Create(path,fmOpenRead);
stream.ReadComponentRes(edt1); //读取资源到控件
stream.Free;
end;
end.
Delphi7 流操作_压缩的更多相关文章
- io流操作大全
JAVA 中的IO流 一.流的概念 流(stream)的概念源于UNIX中管道(pipe)的概念.在UNIX中,管道是一条不间断的字节流,用来实现程序或进程间的通信,或读写外围设备.外部 ...
- Scala进阶之路-I/O流操作之文件处理
Scala进阶之路-I/O流操作之文件处理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 说起Scala语言操作文件对象其实是很简单的,大部分代码和Java相同. 一.使用Scal ...
- Java高级特性1_流库_初体验
Java高级特性流库_初体验 面对结果编程 在编程里, 有两种编程方式, 一种是面对过程编程, 一种是面对结果编程. 两者区别如下 面向过程编程 面向过程编程需要编程程序让程序依次执行得到自己想要的结 ...
- Node学习笔记(一):stream流操作
NodeJs中谈及较多的可能就是Stream模块了,先写一个简单的ajax回调 $.post("index.php",{data:'aaa',order:'ccc'},functi ...
- [WCF编程]10.操作:流操作
一.流操作概述 在默认情况下,当客户端调用服务时,服务只有在接收到完整的消息后才会被调用,同样,客户端只有在包含了调用结果的返回消息被完整接受时,才会解除对它的阻塞. 对于数据量小的消息,这种交换模式 ...
- Stream 流操作
Stream 类 先看下面的图 Stream 是所有流的抽象基类(不能被实例化,需要使用他的派生类FileStream/MemoryStream/BufferedStream).流是字节序列的抽象概 ...
- delphi 基础之三 文件流操作
文件流操作 Delphi操作流文件:什么是流?流,简单来说就是建立在面向对象基础上的一种抽象的处理数据的工具.在流中,定义了一些处理数据的基本操作,如读取数据,写入数据等,程序员是对流进行所有操作的, ...
- IOS文件操作的两种方式:NSFileManager操作和流操作
1.常见的NSFileManager文件方法 -(NSData *)contentsAtPath:path //从一个文件读取数据 -(BOOL)createFileAtPath: path cont ...
- C++流操作之fstream
在Windows平台对文件进行存取操作可选的方案有很多,如果采用纯C,则需要用到File*等,当然也可以直接调用Windows API来做:如果采用C++,首先想到的就是文件流fstream.虽然在C ...
随机推荐
- windows上使用git
开始的时候同事只给了一个地址,类似这样:git@111.111.1.1:ABCDEF (1)如何在Windows上使用Git 有一篇博客不错:http://www.tuicool.com/articl ...
- 获取选中行中的数据提取并且保存到txt
function getchcount(query: TADOQuery): Integer;var i:integer;begin i:=0; with Query do begin Query.F ...
- windows搭建安装react-native环境
在win10环境下,利用Genymotion模拟器,配置react-native的环境. 一.安装JDK 在网上下载jdk,版本最好是1.8以上.安装后要对环境变量进行配置. 同时在 Path 中配置 ...
- 五十四、SAP中LVC表格每列的宽度自适应
一.之前我们的LVC表格输出的界面,有些列太宽余留空白区块太多,有些列则显示不全还带省略号等 二.我们来到'REUSE_ALV_GRID_DISPLAY_LVC'的模块中,查看他的属性 三.我们查看L ...
- Meeloun教你如何正式切入Essay写作话题
很多同学在Essay写作过程中会发现:如果题目问到解决办法,写来写去,都是政府要颁布政策,人们要提高意识,感觉一点新意也没有.怎么样更好地切合不同的话题,想到最合适的解决办法呢?今天小编为你奉上更多处 ...
- MyBatis从入门到精通(第3章):MyBatis注解方式的基本使用
MyBatis 注解方式就是将 SQL 语句直接写在DAO层的接口上. 在黑马录制的2018年双元视频课:\08 SSM整合案例[企业权限管理系统]\07.订单操作 有使用MyBatis注解进行多表 ...
- 腾讯云Windows2016数据中文版环境搭建
最近忙活了好几天,在腾讯云上买了台服务器,系统是Windows2016数据中文版,用于个人的学习,下面说一下整个流程吧. 遇到的问题: 一开始是按照腾讯云的指南文档去搞环境配置的,但它上面都是以Win ...
- 【LeetCode】二叉树的最大深度
[问题]给定一个二叉树,找出其最大深度. 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数.说明: 叶子节点是指没有子节点的节点. 示例:给定二叉树 [3,9,20,null,null,15,7 ...
- js实现ctrl+v粘贴上传图片(兼容chrome,firefox,ie11)
背景 我们或多或少都使用过各式各样的富文本编辑器,其中有一个很方便功能,复制一张图片然后粘贴进文本框,这张图片就被上传了,那么这个方便的功能是如何实现的呢? 原理分析 提取操作:复制=>粘贴=& ...
- Canvas绘制水波进度加载
效果: 用到图片下载: 自定义View: package com.czm.mysinkingview; import android.content.Context; import android.g ...