首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VCLZip: zip文件中的“虚拟”目录

VCLZip: zip文件中的“虚拟”目录
EN

Stack Overflow用户
提问于 2012-07-27 06:46:30
回答 1查看 1.1K关注 0票数 5

我们有不同类别的文件,比如CatA..CatD。每个类别都有一个可由用户配置的关联文件夹。例如,CatAC:\Path\To\CatACatBC:\Path\To\CatBCatCC:\Path\To\CatCD

现在,我想根据如下规范从zip文件中备份和恢复这些文件

代码语言:javascript
复制
[CatA]
SomeFile.abc
*.txt

[CatB]
File3.xyz
File4.xyz
.
.
.

生成的zip文件应该具有如下的结构

代码语言:javascript
复制
CatA
  SomeFile.abc
  aaa.txt
  bbb.txt
  ccc.txt
CatB
  File3.xyz
  File4.xyz
.
.
.

我通过VCLZip对每个作业的ZipUnZip(Selected)方法进行多个调用,并使用Pathname属性进行一些黑客操作,从而实现了这一点。但是,我更喜欢one调用,而不是Zip/UnZip(Selected),这样VCLZip就可以更准确地计算总体进度,并且获得一个较少波动的进度条。

我能够通过(Ab)使用TVCLUnzip.FilesList.Objects属性将每个文件类别的一些信息“传输”到一个OnStartZip处理程序中,在那里我可以操作ZipHeader.directory,但是这看起来太复杂了,太脆弱了,所以我希望有一个更简单的解决方案,我就是没看到。有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2012-08-01 21:37:04

你可以在一个ZIP电话里完成。只需填写TVCLZip.FileList和TVclZIP.ExcludeList

代码语言:javascript
复制
VCLZip.FileList.Add('C:\Path\To\CatA\*.txt');
VCLZip.FileList.Add('C:\Path\To\CatA\SomeFile.abc');
VCLZip.FileList.Add('C:\Path\To\CatB\File3.xyz');
......

并定义TVCLZip.OnStartZip。我在我的项目中使用了这个策略,而且效果很好。例如:

代码语言:javascript
复制
procedure TMainForm.VCLZipStartZip( Sender: TObject; FName: String;  var ZipHeader: TZipHeaderInfo; var Skip: Boolean );
var Dest: String;

begin
try
   Dest:=ExtractFilePath(FName);
   Dest:=StringReplace(Dest,'C:\Path\To\','' ,[rfReplaceAll,rfIgnoreCase]);
   ZipHeader.directory:=Dest;
end;

您可以将ZipHeader.directory设置为ZIP文件中的源文件文件夹所需的任何值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11682755

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档