摘要:

我无法获得JCL压缩库来打开任何跨区的归档文件。
它将显示错误“(0000001)Invalid Function”(错误),该错误在borlands'windows.pas'中定义;

scenerios:

使用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.2.0.0和9.65.0.0
跨区归档集中的示例文件名:“Test Archive.7z.002”
尝试使用.tar和.7z压缩
使用了不同的文件大小。 2048字节和2048KB
德尔福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格式。同样的问题)。

也许有人曾经遇到过这个?
有人能指出我正确的方向吗?
感谢您的时间。

斯科特·M。

最佳答案

该错误存在于JEDI项目-问题跟踪工具中。

http://issuetracker.delphi-jedi.org/bug_view_advanced_page.php?bug_id=5137

两种可能的解决方法

  • 将您的JCL安装升级到latest daily build
  • JclCompression.pasprocedure TJclSevenzipDecompressArchive.OpenArchive;中注释以下行,然后重新生成软件包。

    //评论这一行!
    SevenzipCheck(InArchive.Open(AInStream,@MaxCheckStartPosition,OpenCallback));
  • 关于delphi - JEDI JCL压缩库不会打开跨区的存档文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6566738/

    10-09 09:33