Класс для работы с архивами
Автор:
[06 марта 2007]
Версия: 0.1
Тэги: Архивация
В один день мне стало неудобно использовать ^file::cgi[…] для работы с архивами и я написал класс, помогающий мне работать с ними.
Класс поддерживает архиваторы tar (+ компрессоры: gzip и bzip2), zip и rar. Класс используется статически, т.е. нет необходимости в создании объектов с помощью конструкторов.
Домашний каталог и корень.
По умолчанию домашним каталогом для класса считается каталог, в котором размещен или будет размещен архив. Домашний каталог используется для работы с содержанием архива при действиях: создание и разархивирование.
При указании не полного пути к файлу/каталогу на ресурсе, поиск следующего файла/каталога будет относительно домашнего каталога.
«Корень» — корень веб-пространства ($request:document-root).
Примеры
В каталоге, из которого запущен скрипт Парсера, будет создан архив, содержащий файл из этого же каталога:
^Archive:create[db_dump.zip;db_dump-${dtNow.year}${dtNow.month}${dtNow.day}.sql]
Архив, расположенный в корне веб пространства, будет разархивирован в каталог texts, находящийся на 2 уровня выше относительно домашнего каталога (в данном случае он равен корню):
^Archive:extract[/my_texts.rar;../../texts]
Метод init — инициализация статистического класса
^Archive:init[
$.SCRIPT_PATH[путь к скрипту]
$.DEBUG_OBJECT[объект debug-класса]
]
$.SCRIPT_PATH — путь к консольному скрипту (archive.sh — BASH / archive.bat — Win32) [string]
$.DEBUG_OBJECT — объект debug-класса, совместимый с классом Debug (P3 XML Debugger) [object]
Примечание: при повторной инициализации класса, в случае, если не указаны какие-то опции, используются значения предыдущей инициализации, если же таковой нет, то используются значения по умолчанию.
Примечание: работоспособность файла archive.bat под Win32 не проверялась.
Метод create — создание архива
^Archive:create[имя файла;содержание]
^Archive:create[имя файла;содержание;архиватор]
^Archive:create[имя файла;содержание;архиватор;компрессор]
имя файла — имя файла с путем [string]
содержание — имя архивируемого файла с путем или таблица (объект класса table) с одним столбцом path, содержащим архивируемые имена файлов и имена каталогов с путем (см. также «Домашний каталог и корень») [string|table]
архиватор — имя архиватора [string]
компрессор — имя компрессора [string]
Примечание: при указании параметров «архиватор» и «компрессор», не зависимо от того, какое расширение имеет файл, будут использованы указанные программы (поддерживаемые классом).
Метод extract — разархивирование архива
^Archive:extract[имя файла]
^Archive:extract[имя файла;путь]
^Archive:extract[имя файла;путь;архиватор;компрессор]
Разархивирует архив в домашний каталог, либо в указанный каталог.
имя файла — имя файла с путем [string]
путь — путь к каталогу для разархивирования (см. также «Домашний каталог и корень») [string]
архиватор — имя архиватора [string]
компрессор — имя компрессора [string]
Примечание: при указании параметров «архиватор» и «компрессор», не зависимо от того, какое расширение имеет файл, будут использованы указанные программы (поддерживаемые классом).
Метод list — получение содержимого архива
^Archive:list[имя файла]
Возвращает таблицу (объект системного класса table) с одним столбцом path, содержащим имена файлов и каталогов данного архива.
Поля.
SCRIPT_PATH — имя файла консольного скрипта [string]
ARCHIVER — имя архиватора [string]
COMPRESSOR — имя компрессора [string]
Примечание: значения ARCHIVER и COMPRESSOR можно получить лишь после того, как произойдет работа с архивом (создание, разархивирование и т.д.).
Пример использования.
Предположим, нам нужен метод, который при указании ссылки на архив, находящийся на другом ресурсе, скачивал файл, сохранял его во временный каталог и разархивировал в нужный нам каталог на сервере.
@extractWebArchive[strURL;strTmpDir;strDirTo][sTmpDir;fArchive]
^if(!def $strURL){
^throw[CLASS_NAME.spec;^$strURL;param not specified]
}
^if(def $strTmpDir){
$sTmpDir[$strTmpDir]
}{
$sTmpDir[/../data/tmp]
}
^if(^strURL.left(7) ne "http://"){
^throw[CLASS_NAME.url.type;^$strURL;unknown url type]
}
$fArchive[^file::load[binary;$strURL]]
^fArchive.save[binary;$sTmpDir]
^Archive:extract[$sTmpDir/$fArchive.name;$strDirTo]
$result[]
#end @extractWebArchive[]
Скачать:
Archive-0.1a.tar.gz
(20.03.2007
7,4 КБ)
Архив класса для работы с архивами
bLib-0.1.tar.gz
(20.03.2007
1,1 КБ)
Архив дополнительного класса, необходимого для работы