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;
下面是一段参考代码,是在网络上找到的,文件夹小的时候没有问题,但是文件夹一大的时候就无法执行下去,程序会死掉!请问怎么修改啊,如何压缩大的文件夹呢?
//参考如下代码~~
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;