Сжать файл с помощью JclCompression

Я пытаюсь сохранить (сжать) файл.zip с помощью JclCompression с демонстрацией JCL. Когда я нажимаю кнопку "Сохранить" на вкладке "Чтение и запись", демонстрационные вызовы:

procedure TFormMain.ActionSaveExecute(Sender: TObject);
begin
  (FArchive as TJclCompressArchive).Compress;
  CloseArchive;
end;

когда (FArchive as TJclCompressArchive).Compress; выполняется, выдает исключение: "По крайней мере один том сжатия не может быть заменен после обновления архива вне места". Также иногда, когда я нажимаю кнопку "Сохранить", в заголовке формы появляется "приложение не отвечает", поэтому я должен закрыть демо.

Является ли этот код правильным или мне нужно изменить его, чтобы успешно сжать и сохранить ZIP-файл? Есть ли другие демоверсии для JclCompression чтобы я мог научиться пользоваться этими классами?

Помимо этой проблемы, демо, кажется, работает правильно. Я могу открыть zip-файл, создать новый zip-файл, добавить файлы, добавить файлы из каталога, извлечь выбранные файлы, извлечь все и получить свойства zip-файла. Сохранение кажется проблемой.

Я использую Delphi 2010 на Windows 7.

2 ответа

Решение

Та же проблема, что и у jedi-jcl-сжатия-library-wont-open-spanned-archive-files. Библиотека JEDI JCL Compression не будет открывать составные архивные файлы

Используемая вами версия JCL-JVCL содержит ошибки.
Я бы порекомендовал обновить вашу установку JCL до последней ежедневной сборки

Я видел это сообщение об ошибке, когда файлы, которые я хотел заархивировать, были открыты для записи, поэтому вам нужно закрыть их или заранее скопировать во временную папку. Также, если вы используете функцию Create7zArchive(), как мне, вам нужно 7z.dll, помещенный в выходную папку вашего бина. Это печально, но, похоже, JCL не использует Zlib.pas, который уже интегрирован в Delphi.

JCL 2.7.0.5676 (стабильный)

Другие вопросы по тегам