DELPHI压缩文件夹--修改(网上找到一段代码,但是文件夹较大的时候会无法处理),怎么修改

DELPHI压缩文件夹--修改(网上找到一段代码,但是文件夹较大的时候会无法处理),如何修改
下面是一段参考代码,是在网络上找到的,文件夹小的时候没有问题,但是文件夹一大的时候就无法执行下去,程序会死掉!请问怎么修改啊,如何压缩大的文件夹呢?


//参考如下代码~~  
  unit Unit1;  
   
  interface  
   
  uses  
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  
  Dialogs, StdCtrls, ComCtrls, Buttons;  
   
  type  
  TForm1 = class(TForm)  
  ButtonCompression: TButton;  
  ButtonDecompression: TButton;  
  EditFileName: TEdit;  
  EditDirectory: TEdit;  
  SpeedButtonFileName: TSpeedButton;  
  SpeedButtonDirectory: TSpeedButton;  
  OpenDialog1: TOpenDialog;  
  procedure ButtonCompressionClick(Sender: TObject);  
  procedure ButtonDecompressionClick(Sender: TObject);  
  procedure SpeedButtonFileNameClick(Sender: TObject);  
  procedure SpeedButtonDirectoryClick(Sender: TObject);  
  private  
  { Private declarations }  
  public  
  { Public declarations }  
  end;  
   
  var  
  Form1: TForm1;  
   
  implementation  
   
  {$R *.dfm}  
   
  (*//  
  标题:压缩和解压目录  
  说明:利用ZLib单元;不处理空目录  
  设计:Zswang  
  日期:2003-09-06  
  支持:wjhu111@21cn.com  
  //*)  
   
  ///////Begin Source  
  uses ZLib, FileCtrl;  
   
  const cBufferSize = $4096;  
   
  function FileCompression(mFileName: TFileName; mStream: TStream): Integer;  
  var  
  vFileStream: TFileStream;  
  vBuffer: array[0..cBufferSize]of Char;  
  vPosition: Integer;  
  I: Integer;  
  begin  
  Result := -1;  
  if not FileExists(mFileName) then Exit;  
  if not Assigned(mStream) then Exit;  
  vPosition := mStream.Position;  
  vFileStream := TFileStream.Create(mFileName, fmOpenRead or fmShareDenyNone);  
  with TCompressionStream.Create(clMax, mStream) do try  
  for I := 1 to vFileStream.Size div cBufferSize do begin  
  vFileStream.Read(vBuffer, cBufferSize);  
  Write(vBuffer, cBufferSize);  
  end;  
  I := vFileStream.Size mod cBufferSize;  
  if I > 0 then begin  
  vFileStream.Read(vBuffer, I);  
  Write(vBuffer, I);  
  end;  
  finally  
  Free;  
  vFileStream.Free;  
  end;  
  Result := mStream.Size - vPosition; //增量  
  end; { FileCompression }  
   
  function FileDecompression(mFileName: TFileName; mStream: TStream): Integer;  
  var  
  vFileStream: TFileStream;