unit Unit1;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Buttons,Zlib;type
TForm1 = class(TForm)
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
OpenDialog1: TOpenDialog;
Label1: TLabel;
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;procedure UnCompressStream(var MyStream: TMemoryStream);
procedure CompressStream(var MyStream: TMemoryStream);implementationuses Unit2;{$R *.DFM}procedure TForm1.BitBtn1Click(Sender: TObject);
var MS: TMemoryStream;
s:string;
begin
if not OpenDialog1.Execute then exit else s:=OpenDialog1.FileName;
MS:= TMemoryStream.Create;
ms.LoadFromFile(s);
CompressStream(MS);
s:=ChangeFileExt(s,'.zzz');
ms.SaveToFile(s);
ms.Free;end;procedure TForm1.BitBtn2Click(Sender: TObject);
var MS: TMemoryStream;
s:string;
begin
if not OpenDialog1.Execute then exit else s:=OpenDialog1.FileName;
MS:= TMemoryStream.Create;
ms.LoadFromFile(s);
UnCompressStream(MS);
s:=ChangeFileExt(s,'.bak');
ms.SaveToFile(s);
ms.Free;end;procedure CompressStream(var MyStream: TMemoryStream);
var
SourceStream: TCompressionStream;
DestStream: TMemoryStream;
Count: Integer;
Begin
Count := MyStream.Size;
DestStream := TMemoryStream.Create;
SourceStream:=TCompressionStream.Create(clDefault, DestStream);
Try
MyStream.SaveToStream(SourceStream);
SourceStream.Free;
MYStream.Clear;
MyStream.WriteBuffer(Count, SizeOf(Count));
MyStream.CopyFrom(DestStream, 0);
MyStream.Position := 0;
finally
DestStream.Free;
end;
end;procedure UnCompressStream(var MyStream: TMemoryStream);
var
SourceStream: TDecompressionStream;
Buffer: PChar;
Count: Integer;
Begin
MyStream.ReadBuffer(Count, SizeOf(Count));
GetMem(Buffer, Count);
SourceStream := TDecompressionStream.Create(MyStream);
Try
SourceStream.ReadBuffer(Buffer^, Count);
MyStream.Clear;
MyStream.WriteBuffer(Buffer^, Count);
MyStream.Position := 0;
finally
FreeMem(Buffer);
end;
end;end.end.这个Demo可以把myfile.txt压成myfile.zzz,可以对myfile.zzz还原为myfile.bak
关于目录压缩,看来只有编历目录一个文件一个文件来了,当然,恐怕要设计自己的一种
文件格式,以保存相关信息了.
祝你好运!
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Buttons,Zlib;type
TForm1 = class(TForm)
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
OpenDialog1: TOpenDialog;
Label1: TLabel;
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;procedure UnCompressStream(var MyStream: TMemoryStream);
procedure CompressStream(var MyStream: TMemoryStream);implementationuses Unit2;{$R *.DFM}procedure TForm1.BitBtn1Click(Sender: TObject);
var MS: TMemoryStream;
s:string;
begin
if not OpenDialog1.Execute then exit else s:=OpenDialog1.FileName;
MS:= TMemoryStream.Create;
ms.LoadFromFile(s);
CompressStream(MS);
s:=ChangeFileExt(s,'.zzz');
ms.SaveToFile(s);
ms.Free;end;procedure TForm1.BitBtn2Click(Sender: TObject);
var MS: TMemoryStream;
s:string;
begin
if not OpenDialog1.Execute then exit else s:=OpenDialog1.FileName;
MS:= TMemoryStream.Create;
ms.LoadFromFile(s);
UnCompressStream(MS);
s:=ChangeFileExt(s,'.bak');
ms.SaveToFile(s);
ms.Free;end;procedure CompressStream(var MyStream: TMemoryStream);
var
SourceStream: TCompressionStream;
DestStream: TMemoryStream;
Count: Integer;
Begin
Count := MyStream.Size;
DestStream := TMemoryStream.Create;
SourceStream:=TCompressionStream.Create(clDefault, DestStream);
Try
MyStream.SaveToStream(SourceStream);
SourceStream.Free;
MYStream.Clear;
MyStream.WriteBuffer(Count, SizeOf(Count));
MyStream.CopyFrom(DestStream, 0);
MyStream.Position := 0;
finally
DestStream.Free;
end;
end;procedure UnCompressStream(var MyStream: TMemoryStream);
var
SourceStream: TDecompressionStream;
Buffer: PChar;
Count: Integer;
Begin
MyStream.ReadBuffer(Count, SizeOf(Count));
GetMem(Buffer, Count);
SourceStream := TDecompressionStream.Create(MyStream);
Try
SourceStream.ReadBuffer(Buffer^, Count);
MyStream.Clear;
MyStream.WriteBuffer(Buffer^, Count);
MyStream.Position := 0;
finally
FreeMem(Buffer);
end;
end;end.end.这个Demo可以把myfile.txt压成myfile.zzz,可以对myfile.zzz还原为myfile.bak
关于目录压缩,看来只有编历目录一个文件一个文件来了,当然,恐怕要设计自己的一种
文件格式,以保存相关信息了.
祝你好运!
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货