Иногда в процессе установки приложений с помощью Inno Setup возникает необходимость извлечь из архива ZIP не весь его содержимое, а только один конкретный файл. В данной статье мы рассмотрим, как это можно сделать, используя Object Pascal (Delphi).
Проблема
Вопрос, с которым сталкиваются разработчики, заключается в том, как извлечь из архива ZIP только один файл, используя уже существующий код для распаковки всего содержимого архива.
Решение
Для решения этой задачи можно использовать метод Folder.ParseName, который позволяет получить ссылку на конкретный файл внутри архива, а затем использовать метод Folder.CopyHere для извлечения этого файла в указанную директорию.
Пример кода
const
NO_PROGRESS_BOX = 4;
RESPOND_YES_TO_ALL = 16;
procedure UnZipSingleFile(ZipPath, FileName, TargetPath: string);
var
Shell: Variant;
ZipFile: Variant;
Item: Variant;
TargetFolder: Variant;
begin
Shell := CreateOleObject('Shell.Application');
ZipFile := Shell.NameSpace(ZipPath);
if VarIsClear(ZipFile) then
RaiseException(Format('ZIP file "%s" does not exist or cannot be opened', [ZipPath]));
Item := ZipFile.ParseName(FileName);
if VarIsClear(Item) then
RaiseException(Format('Cannot find "%s" in "%s" ZIP file', [FileName, ZipPath]));
TargetFolder := Shell.NameSpace(TargetPath);
if VarIsClear(TargetFolder) then
RaiseException(Format('Target path "%s" does not exist', [TargetPath]));
TargetFolder.CopyHere(Item, NO_PROGRESS_BOX or RESPOND_YES_TO_ALL);
end;
Применение
Чтобы использовать этот код в вашем проекте Inno Setup, просто вызовите функцию UnZipSingleFile, передав путь к архиву, имя файла, который нужно извлечь, и путь, куда следует поместить извлеченный файл. Например:
Этот код извлечет файл default.properties из архива seimpresoras-2.2.zip в директорию установки приложения.
Важные замечания
Убедитесь, что путь к архиву и путь назначения корректны и существуют.
Имя файла в параметре FileName должно быть указано с учетом пути внутри архива.
Используя данный подход, вы сможете извлекать отдельные файлы из архивов ZIP в процессе установки вашего приложения с помощью Inno Setup.
Как извлечь один файл из архива ZIP в процессе установки приложения с использованием Inno Setup, используя Object Pascal.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS