delphi 使用JCLCompression解压缩多卷SevenZip文件

afdcj2ne  于 2023-04-05  发布在  其他
关注(0)|答案(2)|浏览(173)

我使用以下代码从SevenZIP压缩包中提取文件。它可以很好地与单卷压缩包,但无法与多卷。

procedure TMyClass.ExtractArchive(AInputFile:String;AOutputDir:String);
var
 LArchive:TJcl7zDecompressArchive;
begin
 LArchive:=TJcl7zDecompressArchive.Create(AInputFile);
 try
  LArchive.OnProgress:=ExtractProgress;
  LArchive.ListFiles();
  try
   LArchive.ExtractAll(AOutputDir);
  except
   on e:Exception do
    LogError(e);
  end;
 finally
  LArchive.Free();
 end;
end;

看来,卷的SevenZip只是文件分裂成两半(在相反的RAR和ZIP压缩文件)。我必须手动准备组合流(所有卷作为一个)全部由我自己?或JCL将以某种方式自动处理它?

0mkxixxg

0mkxixxg1#

Jcl 7zip类不能很好地处理阅读现有的分割存档。它有回调来获取卷名,但如果它们不在单独的可移动驱动器上,最简单的方法是在打开它之前手动添加所有卷:

if AnsiEndsText(AInputFile, '.001') then
begin 
  LArchive := TJcl7zDecompressArchive.Create(AInputFile, GetFileSize(AInputFile, nil));
  for VolumeIndex := 2 to 999 do begin
    VolumeName := ChangeFileExt(AInputFile, Format('.%.3d', [VolumeIndex]));
    VolumeSize := GetFileSize(VolumeName, nil);
    if VolumeSize = INVALID_FILE_SIZE then
      Break;
    LArchive.AddVolume(VolumeName, VolumeSize);
  end
end
else
  LArchive := TJcl7zDecompressArchive.Create(AInputFile);
yk9xbfzb

yk9xbfzb2#

可以使用multivolume 7zip和jcl压缩拆分大文件,然后无法使用上述方法解压缩拆分版本。

相关问题