В статье про сжатие файлов я ничего не рассказывал о стандартных для Windows zip-архивах. А между тем сжатие в них тоже производится по алгоритму zip, но они доступны для открытия средствами Windows. И самое главное: если вам понадобится в программе извлечь данные из zip-архива, то без компонента Zipper не обойтись.
Компонент Zipper находится на вкладке "Система", в группе "Компоненты". Его версия в дистрибутиве программы, к сожалению, ограничена по функциональности. Недостатком является отсутствие важных точек (например, для задания комментария и пароля), а также поддержка файлов размером не больше 15-18 Мб. Поэтому для серьёзной работы и создания своего архиватора он не годится, но для разовых действий типа извлечения нужного файла из архива он подойдёт в самый раз.
Помните также, что для работы компоненту требуется bszip.dll, которые лежит рядом с HiAsm. Он должен находиться либо рядом с программой, либо в папке Windows.
Упаковать файлы достаточно просто, но нужно обратить внимание на некоторые специфические параметры компонента.
Сначала вы выбираете файлы. Параметр Select у диалога открытия установлен в Multi, что означает возможность множественного выбора файлов. При упаковке после выбора имени архива в диалоге сохранения сначала вызывается метод для создания нового архива, а затем из списка все файлы добавляются на упаковку. И лишь затем вызывается метод для собственно упаковки.
Обратите внимание на группу параметров ZIP. Эти параметры управляют сжатием. Здесь можно выбрать и степень сжатия, и задать комментарий. Правда, из программы этот комментарий уже не изменить (точки-то нет). Но, как уже говорилось, для единичного использования сойдёт.
Теперь займёмся распаковкой архива.
Чтобы открыть архив, нужно скинуть файл на иконку программы. Если будет скинуто несколько - откроется только первый, потому что из массива извлекается только первое имя (под индексом 0).
Затем идёт получение списка файлов в архиве. Причём выдаётся не просто имя файла, а все его специфические характеристики: размер до и после упаковки, время изменения, степень сжатия. Выдаются эти характеристики в отдельной строке для каждого файла через разделитель - табуляцию. И поэтому здесь удобно использовать таблицу, у которой StrDelimiter надо выставить в \9. 9 - это номер табуляции в таблице символов (байт со значением 9 интерпретируется как табуляция), а косая черта - служебный символ, показывающий, что разделитель не цифра 9, а именно символ табуляции.
В таблице уже созданы все колонки. Остаётся только сделать двойной щелчок мышью - и запустится метод извлечения файла, который находится под индексом, переданным на верхнюю точку.
И здесь опять же нужно посмотреть на параметры компонента Zipper, на группу UNZIP. Все 4 параметра, но очень важных. Во-первых, TestOnly=False, то есть произойдёт реальное извлечение, а не тестирование. Во-вторых, OverwriteExisting и SkipOlder - проверьте их значения, чтобы уже существующие файлы не были перезаписаны. Ну и UseFolders - если вы упаковывали файлы из разных папок, то в архиве будут данные об относительных путях файлов. Это нужно, чтобы все файлы извлеклись по тем папкам, где и были.
Ну и на точку BasePath передаётся имя папки, откуда была запущена программа (то есть папка, где был архив).
У компонента также есть точки для удаления файлов из архива, для множественной упаковки файлов (по маске имени) и событие прогресса, по которому можно узнавать текущее положение дел. Впрочем, из-за ограничения на размер архива целесообразность этой функции сомнительна.
А в следующей статье я расскажу о конвертировании различных типов данных.
Хотите путешествовать - выберите Швеция Стокгольм. Есть разные виды виз в Швецию. Отзывы туристов о путешествии в Стокгольм.
Посетите остров Пхукет. Экскурсии на Пхукете включат посещение храма Ват Чалонг, а также побережье Равай Бич. Заглянете на фермы крокодилов и слонов.
А можете ещё посетить Стамбул. Замечательный шоппинг в Стамбуле на рынке Sultanahmet со множеством достопримечательностей. Шубы, обувь, ковры, а также подарки из Стамбула.
Спасибо за уроки, они весьма кстати!
ОтветитьУдалитьГде найти bszip.dll, который работает с файлами больше 18 Мб?
ОтветитьУдалитьВ интернете. Больше мест я не знаю.
УдалитьВ папке с Hiasm'мом находятся все файлы
ОтветитьУдалитьХотя его нету тут...
ОтветитьУдалить