使用时,需要Zlib.pas和 Zlibconst.pas两个单元文件,这两个文件保存在 Delphi 5.0安装光盘上 InfoExtrasZlib目录下,此外,在 InfoExtrasZlibObj目录中还保存了 Zlib.pas单元引用的 Obj文件,把这个目录拷贝到delphi的lib下,即可。可以适当的改动比如增加目录压缩和分文件压缩,其实就是在文件流前面增加一部分描述结构就是,不多说。使用 时,还要use zlib单元。 两个函数如下:
procedure CompressIt(var CompressedStream: TMemoryStream; const CompressionLevel: TCompressionLevel);
// 参数是传递的流和压缩方式
var
SourceStream: TCompressionStream;
DestStream: TMemoryStream;
Count: int64; //注意,此处修改了,原来是int
begin
//获得流的原始尺寸
Count := CompressedStream.Size;
DestStream := TMemoryStream.Create;
SourceStream := TCompressionStream.Create(CompressionLevel, DestStream);
try
//SourceStream中保存着原始的流
CompressedStream.SaveToStream(SourceStream);
//将原始流进行压缩, DestStream中保存着压缩后的流
SourceStream.Free;
CompressedStream.Clear;
//写入原始图像的尺寸
CompressedStream.WriteBuffer(Count, SizeOf(Count));
//写入经过压缩的流
CompressedStream.CopyFrom(DestStream, 0);
finally
DestStream.Free;
end;
end;
procedure UnCompressit(const CompressedStream: TMemoryStream; var UnCompressedStream: TMemoryStream);
//参数 压缩过的流,解压后的流
var
SourceStream: TDecompressionStream;
DestStream: TMemoryStream;
Buffer: PChar;
Count: int64;
begin
//从被压缩的图像流中读出原始的尺寸
CompressedStream.ReadBuffer(Count, SizeOf(Count));
//根据尺寸大小为将要读入的原始流分配内存块
GetMem(Buffer, Count);
DestStream := TMemoryStream.Create;
SourceStream := TDecompressionStream.Create(CompressedStream);
try
//将被压缩的流解压缩,然后存入 Buffer内存块中
SourceStream.ReadBuffer(Buffer^, Count);
//将原始流保存至 DestStream流中
DestStream.WriteBuffer(Buffer^, Count);
DestStream.Position := 0; //复位流指针
DestStream.Position := length(VER_INFO);
//从DestStream流中载入图像流
UnCompressedStream.LoadFromStream(DestStream);
finally
FreeMem(Buffer);
DestStream.Free;
end;
end;
使用的例子如下:
procedure TForm1.Button5Click(Sender: TObject);
//把指定文件压缩然后保存为另外一个压缩包,
//呵呵,我使用的时候是把后缀改成cab,可以唬一些人吧?
var
SM: TMemoryStream;
begin
if OpenDialog1.Execute then
begin
if SaveDialog1.Execute then
begin
SM := TMemoryStream.Create;
try
Sm.LoadFromFile(OpenDialog1.FileName);
SM.Position := 0;
Compressit(sm, clDefault);
sm.SaveToFile(SaveDialog1.FileName);
finally
SM.Free;
end;
end;
end;
end;
procedure TForm1.BitBtn2Click(Sender: TObject);
//把指定的压缩包解成原来的文件。
var
SM, DM: TMemoryStream;
begin
if OpenDialog1.Execute then
begin
if SaveDialog1.Execute then
begin
SM := TMemoryStream.Create;
DM := TMemoryStream.Create;
try
Sm.LoadFromFile(OpenDialog1.FileName);
SM.Position := 0;
UnCompressit(sm, dm);
dm.Position := 0;
dm.SaveToFile(SaveDialog1.FileName);
finally
SM.Free;
DM.Free;
end;
end;
end;
end;
分享到:
相关推荐
使用XE4自带单元System.Zip。来压缩解压,有XE4写的Exe,XE4写的Dll可供Delphi7调用。里面都有源码。
Delphi压缩解压文件,无需第三方控件,已测试通过
delphi文件压缩源码 Paht\rar.exe a -r aaa aaa RAR的执行文件名 增加压缩包 连子目录 压缩包文件名 要压缩的目录名 Winrar只是提供的图形界面,真正压缩的还是RAR.EXE rar.exe /?会有详细帮助。 winexec('...
不用VCL压缩控件,仅用Delphi XE2 新增的 System.Zip 单元,一行代码即可完成整个文件夹内文件的压缩和解压缩,简单实用。
可将delphi编译后的文件减肥,如exe文件,dll文件,非delph编译文件也可以用
delphi 用的解压,压缩的文件使用的dll,可用于rar,zip等文件
VCLZip Native Delphi Zip/UnZip Component! (VCLZip Lite: Version 2.23 April 14th, 2002) (VCLZip Pro: Version 3.10 Buid 1 - November 25th, 2007) IMPORTANT: If installing the registered version, ...
有些人可能已经知道,Delphi(至少从XE2起)附带了一个内置的TZipFile类,用于读写zip文件。这是一个只是功能有限的一个相当基础的类,但这对于日常工作来说可能就够了。 在最近将项目从Delphi 7迁移到Delphi 10.1...
Delphi基于Winrar压缩文件备份工具,根据WinRAR的命令扩展开发的文件压缩备份程序,支持目录自动备份,每个目录都有一个自己的计时器,支持循环备份,比如备份10次后自动覆盖,支持每日、每周、每月备份指定目录的...
delphi保存文件到数据库中
在delphi中,进行文件的zip压缩解压缩可以使用一个第三方控件VCLZip来完成。
Delphi实现文件的压缩与解压,包含Demo与控件,非常有用,分享给大家。
delphi自动压缩、解压控件,此控件可以很方便地实现压缩文件,解压文件功能。开发类以好压式的软件。
delphi程序exe文件压缩软件,解决exe文件过大问题。
PDF类压缩包源文件 (Delphi) Delphi PDF.pas源文件
使用ZipVcl控件来解压ZIp文件,能把多个文件压缩成ZIP文件
Delphi基于zlib类库实现文件压缩程序,据说zlib压缩率可达到80%,不知是真是假,不过即使达不到这么高,也不会比WINRAR差不太多吧,这个程序将调用zlib类库,实现Delphi代码的文件压缩程序。
Delphi调用7Zip压缩文件,直接调用7zip.exe 需要7z.dll支持,支持7z命令行
简单实现了Delphi解压ZIP文件,不需要复杂代码,20行代码轻松解决,直接引用delphi的类库。
Delphi2007 敲的。 只是对流的压缩和解压,和Winrar无任何关系。