Библиотека JEDI JCL Compression не будет открывать составные архивные файлы
Резюме:
У меня возникли проблемы с получением библиотеки сжатия JCL для открытия любых составных архивов. Он представляет ошибку "(0000001) Неверная функция", как определено в borlands "windows.pas";
scenerios:
Один архив, сжатый с использованием примера сжатия JCL.
-Будет распаковываться как в примере JCL, так и в графическом интерфейсе 7zip.
Объединенный архив, содержащий более 7 файлов, сжатых с использованием примера сжатия JCL.
-Будет распакован только в 7zip графическом интерфейсе. Не в состоянии распаковать, используя пример JCL.
Единый архив, сжатый с помощью графического интерфейса 7zip.
-Будет распаковываться как в примере JCL, так и в графическом интерфейсе 7zip.
Объединенный архив, сжатый более чем 7 файлами с помощью графического интерфейса 7zip.
-Будет распакован только в 7zip графическом интерфейсе. Не в состоянии распаковать с использованием 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 байт и 2048 КБ
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 используется в изображении. Та же проблема).
Может быть, кто-то сталкивался с этим раньше?
Кто-нибудь может указать мне правильное направление, пожалуйста?
Спасибо за ваше время.
Скотт М.
1 ответ
Эта ошибка существует в Project JEDI - Issue Tracker.
http://issuetracker.delphi-jedi.org/bug_view_advanced_page.php?bug_id=5137
Два возможных обходных пути
- Обновите установку JCL до последней ежедневной сборки
Прокомментируйте следующую строку в
JclCompression.pas
вprocedure TJclSevenzipDecompressArchive.OpenArchive;
и пересобрать пакеты.// комментируем эту строку!
SevenzipCheck (InArchive.Open (AInStream, @MaxCheckStartPosition, OpenCallback));