11

概要:

JCL 圧縮ライブラリを取得して、スパンされたアーカイブを開くことができません。borlands 'windows.pas' で定義されているエラー「(0000001) Incorrect Function」が表示されます。

シナリオ:

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 圧縮の例で開かれたファイルのイメージ。

おそらく誰かがこれに遭遇したことがありますか?
誰かが私を正しい方向に向けることができますか?.
お時間をいただきありがとうございます。

スコット M.

4

1 に答える 1

2

このバグは Project JEDI - Issue Tracker に存在します。

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

考えられる 2 つの回避策

  • JCL インストールを最新のデイリー ビルドにアップグレードする
  • JclCompression.pasatの次の行をコメントしてprocedure TJclSevenzipDecompressArchive.OpenArchive;、パッケージを再構築します。

    // この行をコメントしてください !
    SevenzipCheck(InArchive.Open(AInStream, @MaxCheckStartPosition, OpenCallback));

于 2011-09-29T19:56:04.497 に答える