суббота, 21 ноября 2009 г.

HiAsm и ZIP-архивы

HiAsm и ZIP-архивы

В статье про сжатие файлов я ничего не рассказывал о стандартных для 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 со множеством достопримечательностей. Шубы, обувь, ковры, а также подарки из Стамбула.

5 комментариев:

  1. Спасибо за уроки, они весьма кстати!

    ОтветитьУдалить
  2. Где найти bszip.dll, который работает с файлами больше 18 Мб?

    ОтветитьУдалить
  3. В папке с Hiasm'мом находятся все файлы

    ОтветитьУдалить
  4. Хотя его нету тут...

    ОтветитьУдалить