JEDI JCL 压缩库无法打开跨区存档文件

发布于 2024-11-18 07:56:37 字数 2174 浏览 3 评论 0原文

摘要:

我无法让 JCL 压缩库打开任何跨区存档。 它显示了 borlands 'windows.pas' 中定义的错误“(0000001) 错误函数”;

场景

使用 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.

Summary:

I am having trouble to get the JCL compression library to open any spanned archives.
It presents the error "(0000001) Incorrect Function" as defined in borlands 'windows.pas';

scenerios:

A single archive compressed using the JCL compression example.
-Will uncompress in both the JCL example and the 7zip gui.

A spanned archive over 7 files compressed using the JCL compression example.
-Will uncompress in only the 7zip gui. Fails to uncompress using JCL example.

A single archive compressed using the 7zip gui.
-Will uncompress in both the JCL example and the 7zip gui.

A spanned archive compressed over 7 files using the 7zip gui.
-Will uncompress in only the 7zip gui. Fails to uncompress using JCL

Extra information

The JCL compression demo is the one included with the JCL library.
JCL: 2.2.1.3970
7zip dll: 9.20.0.0 and 9.65.0.0
Example filename in spanned archive set: "Test Archive.7z.002"
Tried with both .tar and .7z compression
Different file sizes were used. 2048 bytes and 2048KB
Delphi 2009.

This is the code im using.
Its from the JCL compression demo.
Error occurs on line '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;

The JCL example does know about the files and does open them.
(zip format used in image. Same problem).
Image of files opened by JCL compression example.

Prehaps someone has come across this before?.
Can anyone point me in the right direction please?.
Thank you for your time.

Scott M.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

零崎曲识 2024-11-25 07:56:37

该错误存在于 Project JEDI - Issue Tracker 中。

http://issuetracker.delphi-jedi.org/bug_view_advanced_pa​​ge.php?bug_id=5137

两种可能的解决方法

  • 将 JCL 安装升级到 最新每日构建
  • procedure TJclSevenzipDecompressArchive.OpenArchive; 处的 JclCompression.pas 中注释以下行并重建包。< /p>

    //注释此行!
    SevenzipCheck(InArchive.Open(AInStream, @MaxCheckStartPosition, OpenCallback));

This bug exists in Project JEDI - Issue Tracker.

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

Two possible work-around

  • Upgrade your JCL installation to latest daily build
  • Comment the following line in JclCompression.pas at procedure TJclSevenzipDecompressArchive.OpenArchive; and rebuild the packages.

    // comment this line !
    SevenzipCheck(InArchive.Open(AInStream, @MaxCheckStartPosition, OpenCallback));

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文