概要:
JCL圧縮ライブラリでスパンアーカイブを開くことができません。 Borlandの "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
これはimが使っているコードです。 その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.
回答:
回答№1は2このバグはProject JEDI - Issue Trackerに存在します。
http://issuetracker.delphi-jedi.org/bug_view_advanced_page.php?bug_id=5137
考えられる2つの回避策
- JCLインストールをにアップグレードします。 最新のデイリービルド
の次の行をコメントにする
JclCompression.pas
〜でprocedure TJclSevenzipDecompressArchive.OpenArchive;
そしてパッケージを再構築します。//この行をコメントする
SevenzipCheck(InArchive.Open(AInStream、@ MaxCheckStartPosition、OpenCallback));