Uli*_*rdt 5 delphi zip unzip delphi-2007 vclzip
我们有被分成不同类别的文件,说CatA... CatD.每个类别都有一个可由用户配置的关联文件夹.例如CatA去C:\Path\To\CatA,CatB到C:\Path\To\CatB和CatC和CatD去C:\Path\To\CatCD.
现在我想根据类似的规范在zip文件中备份和恢复这些文件
[CatA]
SomeFile.abc
*.txt
[CatB]
File3.xyz
File4.xyz
.
.
.
Run Code Online (Sandbox Code Playgroud)
生成的zip文件应该具有类似的结构
CatA
SomeFile.abc
aaa.txt
bbb.txt
ccc.txt
CatB
File3.xyz
File4.xyz
.
.
.
Run Code Online (Sandbox Code Playgroud)
我通过与VCLZip管理这个多的电话Zip和UnZip(Selected)每工作方法有点两轮牛车与路径名属性.但是我更喜欢一次调用Zip/ UnZip(Selected)以便VCLZip可以更准确地计算整体进度,并且我得到一个不那么紧张的进度条.
我能够通过(ab)使用TVCLUnzip.FilesList.Objects属性来实现这一点,将每个文件类别信息"转移"到一个OnStartZip我可以操作的处理程序中ZipHeader.directory,但这看起来太复杂和脆弱,所以我希望有一个更简单的解决方案,我只是没有看到.有任何想法吗?
您可以通过一次 ZIP 电话完成此操作。只需填写 TVCLZip.FileList 和 TVclZIP.ExcludeList
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');
......
Run Code Online (Sandbox Code Playgroud)
并定义TVCLZip.OnStartZip. 我在我的项目中使用了这个策略并且效果很好。例如:
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;
Run Code Online (Sandbox Code Playgroud)
您可以将 ZipHeader.directory 设置为 ZIP 文件中源文件夹所需的任何值。