我正在尝试使用Abbrevia来构建一个ZIP存档。代码如下所示:
procedure TMyClass.AddToArchive(archive: TAbZipArchive; const filename: string);
var
fullname: string;
begin
FReport.newStep(format('Preparing %s...', [filename]));
if trim(filename) = '' then
Exit;
fullname := TPath.Combine(GetRootPath(), filename);
if fileExists(fullname) then
archive.AddFiles(filename, faAnyFile)
else FMissingValues.add(ExtractFileName(fullname));
end;
procedure TMyClass.ZipProc(Sender : TObject; Item : TAbArchiveItem;
OutStream : TStream);
begin
AbZip(TAbZipArchive(Sender), TAbZipItem(Item), OutStream);
end;
procedure TMyClass.BuildArchive(const files, zipname: string);
var
list: TStringList;
archive: TAbZipArchive;
filename, root: string;
begin
archive := TAbZipArchive.Create(zipname, fmCreate);
list := TStringList.Create;
try
archive.InsertHelper := ZipProc;
root := GetRootPath();
archive.BaseDirectory := root;
list.Text := files;
for filename in list do
AddToArchive(archive, TPath.Combine(root, filename));
archive.Save;
finally
archive.Free;
list.free;
end;
end;我得到一个有效的压缩文件,除了一个问题。在生成的the文件中,文件夹结构是相对于C:驱动器的根创建的,而不是相对于archive.BaseDirectory创建的。(所有东西都存储在\Users\Mason\Documents\等等下面)很明显,我误解了BaseDirectory财产的用途。如何使插入的文件相对于特定的根文件夹存储?
发布于 2014-02-06 16:26:35
您不应该在AddFiles中使用完整的路径,而只使用相对于BaseDirectory的路径。
https://stackoverflow.com/questions/21608075
复制相似问题