【发布时间】:2011-07-04 02:09:46
【问题描述】:
总结:
我无法让 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
德尔福 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.
【问题讨论】:
-
FArchive的类名是什么。方法TxxxDecompressArchive.ListFiles哪里出现异常? -
@Lieven 异常来自
procedure TJclSevenzipDecompressArchive.OpenArchiveSevenzipCheck()调用。
标签: delphi compression jedi jedi-code-library