JEDI JCL压缩库无法打开跨越多个存档文件的文件。

11

摘要:

我在尝试使用 JCL 压缩库打开某些分卷压缩文件时遇到了困难。它会出现错误 "(0000001) Incorrect Function",就像 Borland 的 'windows.pas' 中所定义的那样。

情景:

使用 JCL 压缩示例压缩单个归档文件。
-将在 JCL 示例和 7zip gui 中解压缩。

使用 JCL 压缩示例压缩跨越 7 个文件的分卷归档文件。
-只能在 7zip gui 中解压缩。使用 JCL 示例无法解压缩。

使用 7zip gui 压缩单个归档文件。
-将在 JCL 示例和 7zip gui 中解压缩。

使用 7zip gui 压缩跨越 7 个文件的分卷归档文件。
-只能在 7zip gui 中解压缩。使用 JCL 无法解压缩。

额外信息:

JCL 压缩演示是 JCL 库中包含的演示之一。
JCL: 2.2.1.3970
7zip dll: 9.20.0.0 和 9.65.0.0
分卷归档集中的示例文件名为: "Test Archive.7z.002"
尝试了 .tar 和 .7z 压缩格式
使用不同的文件大小,2048 字节和 2048KB
开发工具为 Delphi 2009。

这是我正在使用的代码。 它来自于 JCL 压缩演示。 错误出现在" TJclDecompressArchive(FArchive).ListFiles" 这一行。

procedure TFormMain.ActionOpenROExecute(Sender: TObject);
var
  ArchiveFileName, Password: string;
  AFormat: TJclDecompressArchiveClass;
  SplitArchive: Boolean;
begin
  if OpenDialogArchiveRO.Execute then
  begin
    CloseArchive;

ArchiveFileName := OpenDialogArchiveRO.FileName;
SplitArchive := AnsiSameText(ExtractFileExt(ArchiveFileName), '.001');
if SplitArchive then
  ArchiveFileName := ChangeFileExt(ArchiveFileName, '');

AFormat := GetArchiveFormats.FindDecompressFormat(ArchiveFileName);

if AFormat <> nil then
begin
  if SplitArchive then
    ArchiveFileName := ArchiveFileName + '.%.3d';

  InputQuery('Archive password', 'Value', Password);

  FArchive := AFormat.Create(ArchiveFileName, 0, SplitArchive);
  FArchive.Password := Password;
  FArchive.OnProgress := ArchiveProgress;

  if FArchive is TJclDecompressArchive then
    TJclDecompressArchive(FArchive).ListFiles
  else
  if FArchive is TJclUpdateArchive then
    TJclUpdateArchive(FArchive).ListFiles;

  ListView1.Items.BeginUpdate;
  try
    while ListView1.Items.Count < FArchive.ItemCount do
      ListView1.Items.Add;
  finally
    ListView1.Items.EndUpdate;
  end;
end
else
  ShowMessage('not a supported format');
  end;
end;

JCL示例程序知道文件并会打开它们。(图像中使用了zip格式,同样的问题)。 JCL压缩示例程序打开的文件图像。

或许有人之前遇到过这个问题吗?
请问有人能指导我方向吗?
感谢您的时间。

Scott M.


FArchive 的类名是什么?在 TxxxDecompressArchive.ListFiles 方法中,异常发生在哪里? - Lieven Keersmaekers
1
@Lieven,异常来自于procedure TJclSevenzipDecompressArchive.OpenArchive中的SevenzipCheck()调用。 - TridenT
1个回答

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接