1、VCLZip压缩多级目录的问题。
2、VCLZip压缩过程的进度显示问题。
请高手解答。
2、VCLZip压缩过程的进度显示问题。
请高手解答。
解决方案 »
- 请问怎么过滤WM_COMMAND消息?
- 高手请指教 delphi WebBrowser.Document 使用问题
- 使用TreeView时,用图标显示,怎么才能使选中的节点的图标不变?
- "Microsoft Layer for Unicode failed to initialize"这是什么错误?
- 关于fastreport问题,非常急,请大侠帮忙,不胜感激!(65分)
- 小女子有个问题急需解决请各位大侠帮忙了
- 动态定位字段位置
- Delphi启动Excel或PowerPoint
- 又TMD出问题了
- 为什么刚提的问题我就进不去?
- Delphi6 的IDE中怎样将繁体显示?
- 数据量太大,如何分批提取数据
Author: Robert Kuhlmann
uses
Zlib; procedure CompressFiles(Files : TStrings; const Filename : String);
var
infile, outfile, tmpFile : TFileStream;
compr : TCompressionStream;
i,l : Integer;
s : String; begin
if Files.Count > 0 then
begin
outFile := TFileStream.Create(Filename,fmCreate);
try
{ the number of files }
l := Files.Count;
outfile.Write(l,SizeOf(l));
for i := 0 to Files.Count-1 do
begin
infile := TFileStream.Create(Files[i],fmOpenRead);
try
{ the original filename }
s := ExtractFilename(Files[i]);
l := Length(s);
outfile.Write(l,SizeOf(l));
outfile.Write(s[1],l);
{ the original filesize }
l := infile.Size;
outfile.Write(l,SizeOf(l));
{ compress and store the file temporary}
tmpFile := TFileStream.Create('tmp',fmCreate);
compr := TCompressionStream.Create(clMax,tmpfile);
try
compr.CopyFrom(infile,l);
finally
compr.Free;
tmpFile.Free;
end;
{ append the compressed file to the destination file }
tmpFile := TFileStream.Create('tmp',fmOpenRead);
try
outfile.CopyFrom(tmpFile,0);
finally
tmpFile.Free;
end;
finally
infile.Free;
end;
end;
finally
outfile.Free;
end;
DeleteFile('tmp');
end;
end; procedure DecompressFiles(const Filename, DestDirectory : String);
var
dest,s : String;
decompr : TDecompressionStream;
infile, outfile : TFilestream;
i,l,c : Integer;
begin
// IncludeTrailingPathDelimiter (D6/D7 only)
dest := IncludeTrailingPathDelimiter(DestDirectory); infile := TFileStream.Create(Filename,fmOpenRead);
try
{ number of files }
infile.Read(c,SizeOf(c));
for i := 1 to c do
begin
{ read filename }
infile.Read(l,SizeOf(l));
SetLength(s,l);
infile.Read(s[1],l);
{ read filesize }
infile.Read(l,SizeOf(l));
{ decompress the files and store it }
s := dest+s; //include the path
outfile := TFileStream.Create(s,fmCreate);
decompr := TDecompressionStream.Create(infile);
try
outfile.CopyFrom(decompr,l);
finally
outfile.Free;
decompr.Free;
end;
end;
finally
infile.Free;
end;
end;
2.OnTotalPercentDone事件得Percent就是当前的进度值了。
设置这个不行,只是将当前目录压缩,而本目录下的文件夹则不能压缩。
建议看看自带的Demo
只有一个简单的说明。
那个说明里应该有讲到的
通常压缩时将VCLZip.RelativePaths设成True,解压是将VCLUnZip的RecreateDirs设成True。
是的呢,没有这个Password
http://www.delphifans.com/SoftView/SoftView_1185.html