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
关于目录压缩,看来只有编历目录一个文件一个文件来了,当然,恐怕要设计自己的一种
文件格式,以保存相关信息了.
祝你好运!