delphi中ZLIB的用法(压缩与解压缩)

fxywkj 2004-03-04 08:53:44
下面是我现在用的,但是不能对两个或多个文件同时压缩,请问有没有其他的办法,另外我下载了ZIPTV,可是不能用,请大家帮忙!


unit u_main;

interface

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


type

TForm1 = class(TForm)

Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
procedure Button1Click(Sender: TObject);
procedure CompressFile(sSourceFile,sZipFile: string);
procedure Button2Click(Sender: TObject);
procedure UnCompressFile(sZipFile,sUnZipFile: String);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

uses ZLib;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
CompressFile('f:\a.doc','f:\b');


ShowMessage('dd');
end;

procedure TForm1.CompressFile(sSourceFile,sZipFile: string);

var
CompressLevel: TCompressionLevel;
SourceFileStream: TFileStream;
CompressStream: TCompressionStream;
MemStream,DestMemStream: TMemoryStream;
Buffer: PChar;
Count,MemSize: Longint;
begin
CompressLevel:= clDefault;
try
SourceFileStream := TFileStream.Create(sSourceFile, fmOpenRead); //打开源文件
Count := SourceFileStream.size; //读出源文件大小
GetMem(Buffer, Count);

MemStream := TMemoryStream.Create;
DestMemStream := TMemoryStream.Create;

CompressStream := TCompressionStream.Create(CompressLevel, DestMemStream);
try
SourceFileStream.ReadBuffer(Buffer^, Count); //将源文件内容读到Buffer中
MemStream.WriteBuffer(Buffer^, Count); //将Buffer内容读到MemStream中
MemSize := MemStream.Size; //记录原始文件尺寸
MemStream.SaveToStream(CompressStream); //将MemStream内容压缩保存在DestMemStream中
CompressStream.Free;
MemStream.Clear; //清空MemStream内容
MemStream.WriteBuffer(MemSize, SizeOf(MemSize)); //写入原始文件尺寸
MemStream.CopyFrom(DestMemStream, 0); //将压缩过的文件流DestMemStream内容拷贝到MemStream中
MemStream.SaveToFile(sZipFile); //将MemStream内容写到文件
showmessage('successful!')
//result := true;
finally
FreeMem(Buffer);
MemStream.Free; DestMemStream.Free; SourceFileStream.Free;
end;
except
showmessage('failed!')
//result := false;
end;
end;
//===============================解压缩函数====================================================
procedure TForm1.UnCompressFile(sZipFile,sUnZipFile: String);
var
ZipStream: TFileStream;
MemStream: TMemoryStream;
DecompressStream: TDecompressionStream;
Buffer: PChar;
Count: Longint;
begin
try
ZipStream := TFileStream.Create(sZipFile, fmOpenRead); //打开压缩文件
ZipStream.ReadBuffer(Count, SizeOf(Count)); //将压缩文件的原始尺寸读到Count中
GetMem(Buffer, Count); //根据文件的原始尺寸大小给Buffer分配空间

MemStream := TMemoryStream.Create;
DecompressStream := TDecompressionStream.Create(ZipStream);
try
DecompressStream.ReadBuffer(Buffer^, Count); //将文件解压缩到Buffer中
MemStream.WriteBuffer(Buffer^, Count); //将Buffer内容写到MemStream中
MemStream.SaveToFile(sUnZipFile); //将MemStream写到文件
// result := true;
showmessage('successful');
finally
FreeMem(Buffer);
DecompressStream.Free; MemStream.Free; ZipStream.Free;
end;
except
//result := false;
showmessage('failed');
end;
end;



procedure TForm1.Button2Click(Sender: TObject);//调用解压缩
begin
UnCompressFile('f:\b','f:\b.doc');
end;

end.
...全文
592 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧