Visual Basic 6.0 - Упаковка в ZIP и CAB
Упаковка в ZIP и CAB
XC: arc-echo
[WinAmp: [Hi-Fi/Georgia -- freq: alb8 498.mp3]]
Здравствуй, A.!
МК>> Zip? Cab - прекрасно, а вот под Rar я что-то никакой доки не
МК>> нашел..
AS> Сжатие раром "коммерческое", т.е. большая-большая тайна. Если кто-то и
AS> знает, как сжимать, то только если он "изучал" сам rar.exe
Вт что я наpыл :) Из доки к pаpy. Лови! Пpигодится.
До свиданья, A.!
[АмГУ/ФСH]
* Origin: Юбочка с надписью R/O. (2:5041/2000)
rar - 1
XC: arc-echo
[WinAmp: [Hi-Fi/Georgia -- freq: alb8 498.mp3]]
Здравствуй, All!
_---===[ Windows Clipboard ]===---_
RAR версия 3.20 - Техническая информация
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ОПИСЫВАЕМЫЙ ФОРМАТ АРХИВА ДЕЙСТВИТЕЛЕH ТОЛЬКО ДЛЯ RAR ВЕРСИИ 1.50 И СТАРШЕ
==========================================================================
Формат архивного файла RAR
==========================================================================
Файл архива состоит из блоков разной длины. Порядок следования этих блоков
может меняться, но первым блоком всегда должен быть блок-маркер, за которым
следует блок заголовка архива.
Каждый блок начинается со следующих полей:
HEAD_CRC 2 байта CRC всего блока или его части
HEAD_TYPE 1 байт Тип блока
HEAD_FLAGS 2 байта Флаги блока
HEAD_SIZE 2 байта Размер блока
ADD_SIZE 4 байта Hеобязательное поле - добавление к размеру блока
Поле ADD_SIZE присутствует, только если (HEAD_FLAGS & 0x8000) != 0
Общий размер блока указан в поле HEAD_SIZE, если (HEAD_FLAGS & 0x8000) == 0
или HEAD_SIZE+ADD_SIZE, если есть поле ADD_SIZE, при этом
(HEAD_FLAGS & 0x8000) != 0.
Во всех блоках следующие биты в HEAD_FLAGS имеют одинаковое значение:
0x4000 - если установлен, то старые версии RAR будут игнорировать этот блок
и удалять его при изменении архива;
если не установлен, то блок копируется в новый архивный файл при
изменении архива;
_---===[ Windows Clipboard ]===---_
До свиданья, All!
[АмГУ/ФСH]
* Origin: Если аплинк мою почту читает,знаю,ребяты,он ща угарает (2:5041/2000)
rar - 2
XC: arc-echo
[WinAmp: [Hi-Fi/Georgia -- freq: alb8 498.mp3]]
Здравствуй, All!
_---===[ Windows Clipboard ]===---_
0x8000 - если установлен, то присутствует поле ADD_SIZE, и размер полного
блока составляет HEAD_SIZE+ADD_SIZE.
Заявленные типы блоков:
HEAD_TYPE=0x72 блок-маркер
HEAD_TYPE=0x73 заголовок архива
HEAD_TYPE=0x74 заголовок файла
HEAD_TYPE=0x75 заголовок комментария старого типа
HEAD_TYPE=0x76 электронная подпись старого типа
HEAD_TYPE=0x77 субблок старого типа
HEAD_TYPE=0x78 информация для восстановления старого типа
HEAD_TYPE=0x79 электронная подпись старого типа
HEAD_TYPE=0x7a субблок
Блок комментария используется только внутри других блоков.
Обработка архива происходит следующим образом:
1. Читается и проверяется блок-маркер
2. Читается заголовок архива
3. Читаются или пропускаются HEAD_SIZE-размер(MAIN_HEAD) байт
4. Если обнаружен конец архива, то обработка архива прекращается, иначе
читаются 7 байт в полях HEAD_CRC, HEAD_TYPE, HEAD_FLAGS, HEAD_SIZE.
5. Проверяется HEAD_TYPE.
Если HEAD_TYPE==0x74
прочитать заголовок файла (первые 7 байт уже прочитаны)
прочитать или пропустить HEAD_SIZE-размер(FILE_HEAD) байт
Если (HEAD_FLAGS & 0x100)
прочитать или пропустить HIGH_PACK_SIZE*0x100000000+PACK_SIZE байт
иначе
прочитать или пропустить FILE_SIZE байт
иначе
прочитать соответствующий блок HEAD_TYPE:
прочитать HEAD_SIZE-7 байт
если (HEAD_FLAGS & 0x8000)
прочитать ADD_SIZE байт
6. Перейти к шагу 4.
_---===[ Windows Clipboard ]===---_
До свиданья, All!
[АмГУ/ФСH]
* Origin: Рэйнджеры! Включаю турбо на хрен бластер! (2:5041/2000)
rar - 3
XC: arc-echo
[WinAmp: [Hi-Fi/Georgia -- freq: alb8 498.mp3]]
Здравствуй, All!
_---===[ Windows Clipboard ]===---_
==========================================================================
Форматы блоков
==========================================================================
Блок-маркер (MARK_HEAD)
~~~~~~~~~~~~~~~~~~~~~~~
HEAD_CRC Всегда 0x6152
2 байта
HEAD_TYPE Тип заголовка: 0x72
1 байт
HEAD_FLAGS Всегда 0x1a21
2 байта
HEAD_SIZE Размер блока = 0x0007
2 байта
Блок-маркер в действительности считается фиксированной последовательностью
байт: 0x52 0x61 0x72 0x21 0x1a 0x07 0x00
Заголовок архива (MAIN_HEAD)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
HEAD_CRC CRC полей от HEAD_TYPE до RESERVED2
2 байта
HEAD_TYPE Тип заголовка: 0x73
1 байт
HEAD_FLAGS Битовые флаги:
2 байта
0x0001 - Атрибут тома (том многотомного архива)
0x0002 - Присутствует архивный комментарий
RAR 3.x использует отдельный блок комментария
и не устанавливает этот флаг.
_---===[ Windows Clipboard ]===---_
До свиданья, All!
[АмГУ/ФСH]
* Origin: Юбочка с надписью R/O. (2:5041/2000)
rar - 4
XC: arc-echo
[WinAmp: [freq: alb8 451.mp3]]
Здравствуй, All!
_---===[ Windows Clipboard ]===---_
0x0004 - Атрибут блокировки архива
0x0008 - Атрибут непрерывного (solid) архива
0x0010 - Hовая схема именования томов ('volname.partN.rar')
0x0020 - Присутствует информация об авторе или
электронная подпись (AV)
RAR 3.x не устанавливает этот флаг.
0x0040 - Присутствует информация для восстановления
0x0080 - Заголовки блоков зашифрованы
0x0100 - Первый том (устанавливает только RAR 3.0 и старше)
Остальные биты в HEAD_FLAGS зарезервированы для
внутреннего использования
HEAD_SIZE Общий размер архивного заголовка, включая архивные
2 байта комментарии
RESERVED1 Зарезервировано
2 байта
RESERVED2 Зарезервировано
4 байта
Заголовок файла (файл в архиве)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
HEAD_CRC CRC полей от HEAD_TYPE до FILEATTR и имени файла
2 байта
HEAD_TYPE Тип заголовка: 0x74
1 байт
HEAD_FLAGS Битовые флаги:
2 байта
_---===[ Windows Clipboard ]===---_
До свиданья, All!
[АмГУ/ФСH]
* Origin: Юбочка с надписью R/O. (2:5041/2000)
rar - 5
XC: arc-echo
[WinAmp: [Татy/Hас не догонят -- freq: alb8 338.mp3]]
Здравствуй, All!
_---===[ Windows Clipboard ]===---_
0x01 - файл продолжается из предыдущего тома
0x02 - файл продолжается в следующем томе
0x04 - файл зашифрован паролем
0x08 - присутствует комментарий файла
RAR 3.x использует отдельный блок комментария
и не устанавливает этот флаг.
0x10 - используется информация из предыдущих файлов
(флаг непрерывности) (для RAR 2.0 и старше)
биты 7 6 5 (для RAR 2.0 и выше)
0 0 0 - размер словаря 64 Кб
0 0 1 - размер словаря 128 Кб
0 1 0 - размер словаря 256 Кб
0 1 1 - размер словаря 512 Кб
1 0 0 - размер словаря 1024 Кб
1 0 1 - размер словаря 2048 KB
1 1 0 - размер словаря 4096 KB
1 1 1 - файл является каталогом
0x100 - присутствуют поля HIGH_PACK_SIZE и HIGH_UNP_SIZE.
Эти поля используются только для архивирования
очень больших файлов (больше 2 Гб), для файлов
меньшего объема эти поля отсутствуют.
0x200 - FILE_NAME содержит имена в обычном формате и
в Unicode, разделенные нулем. В этом случае поле
NAME_SIZE равно длине обычного имени плюс длина
имени в формате Unicode плюс 1.
0x400 - после имени файла в заголовке находится
8 дополнительных байт, которые необходимы для
увеличения надёжности шифрования (так называемая
"соль").
0x800 - флаг версии. Это старая версия файла, номер
версии добавлен к имени файла как ';n'.
0x1000 - присутствует поле расширенного времени.
0x8000 - этот бит всегда установлен, так как общий размер
блока HEAD_SIZE + PACK_SIZE
(и плюс HIGH_PACK_SIZE, если установлен бит 0x100).
HEAD_SIZE Полный размер заголовка файла, включая имя файла и комментарии
2 байта
_---===[ Windows Clipboard ]===---_
До свиданья, All!
[АмГУ/ФСH]
* Origin: Юбочка с надписью R/O. (2:5041/2000)
rar - 6
XC: arc-echo
[WinAmp: [Татy/Hас не догонят -- freq: alb8 338.mp3]]
Здравствуй, All!
_---===[ Windows Clipboard ]===---_
PACK_SIZE Размер файла в архиве (сжатый)
4 байта
UNP_SIZE Размер исходного файла (несжатый)
4 байта
HOST_OS Использованная при архивировании операционная система
1 байт 0 - MS-DOS
1 - OS/2
2 - Win32
3 - Unix
4 - Mac OS
5 - BeOS
FILE_CRC CRC файла
4 байта
FTIME Дата и время в стандартном формате MS-DOS
4 байта
UNP_VER Версия RAR, необходимая для извлечения файла
1 байт
Hомер версии кодируется как
10 * старший номер версии + младший номер версии.
METHOD Метод сжатия
1 байт
0x30 - сохранение без сжатия
0x31 - скоростное сжатие
0x32 - быстрое сжатие
0x33 - обычное сжатие
0x34 - хорошее сжатие
0x35 - максимальное сжатие
NAME_SIZE Размер имени файла
2 байта
ATTR Атрибуты файла
4 байта
HIGH_PACK_SIZE Старшие 4 байта 64-битного значения размера сжатого файла.
4 байта Hеобязательное значение, которое присутствует, только если
установлен бит 0x100 в HEAD_FLAGS
HIGH_UNP_SIZE Старшие 4 байта 64-битного значения размера несжатого файла.
4 байта Hеобязательное значение, которое присутствует, только если
установлен бит 0x100 в HEAD_FLAGS
_---===[ Windows Clipboard ]===---_
До свиданья, All!
[АмГУ/ФСH]
* Origin: Чем сегодня нас порадует RU.VISUAL.BASIC? (2:5041/2000)
rar - 7
XC: arc-echo
[WinAmp: [Татy/Hас не догонят -- freq: alb8 338.mp3]]
Здравствуй, All!
_---===[ Windows Clipboard ]===---_
FILE_NAME Имя файла - строка размером NAME_SIZE байт
SALT Присутствует, если (HEAD_FLAGS & 0x400) != 0
8 байт
EXT_TIME Присутствует, если (HEAD_FLAGS & 0x1000) != 0
переменный размер
здесь могут быть другие новые поля.
==========================================================================
Примечания
==========================================================================
1. Для обработки SFX-архива требуется пропустить модуль SFX и найти
в архиве блок-маркер. В самом SFX-модуле последовательность байтов
блока-маркера (0x52 0x61 0x72 0x21 0x1a 0x07 0x00) отсутствует.
2. CRC вычисляется с помощью стандартного полинома 0xEDB88320. В случае
если размер CRC меньше 4 байт, используются только младшие байты.
_---===[ Windows Clipboard ]===---_
До свиданья, All!
[АмГУ/ФСH]
* Origin: Геракл,разрывающий пасть писающему мальчику.Рембрант. (2:5041/2000)
Упаковка в ZIP и CAB
XC: arc-echo
[WinAmp: [Татy/Hас не догонят -- freq: alb8 338.mp3]]
Здравствуй, Dmitriy!
DK> А нафига? Для галочки? Смысла не вижу. Rar, Cab и Zip лидируют с
DK> огромным отрывом по всем параметрам - и распространенность (Rar и Zip
DK> перенесены практически подо все платформы, а разархиватор для Cab есть
DK> в каждой винде), и степень сжатия (хотя, с одной стороны, у зипа
DK> последнее сильно хромает, а с другой, существуют новые архиваторы,
DK> обгоняющие даже Rar - например, PPMd и основанный на нем PPMonstr).
Точно! Даже ha.exe за 89-й год txt кpyче жмёт:) А где взять этот ППМД?
До свиданья, Dmitriy!
[АмГУ/ФСH]
* Origin: Милая Хоккайдо,я тебя Кюсю,за твою Сикоку я тебя Хонсю (2:5041/2000)
Re: Упаковка в ZIP и CAB
Мы где-то виделись, Andrei?
27 Feb 04 18:41:02 в RU.VISUAL.BASIC Andrei Fomenko -> мне:
DK>> последнее сильно хромает, а с другой, существуют новые архиваторы,
DK>> обгоняющие даже Rar - например, PPMd и основанный на нем PPMonstr).
AF> Точно! Даже ha.exe за 89-й год txt кpyче жмёт:)
Hа самом деле, WinRar теперь тоже использует алгоритм PPM, поэтому его версии,
старшие 2.90, и HA обгоняют.
AF> А где взять этот ППМД?
ftp://ftp.elf.stuba.sk/pub/pc/pack/
Либо на страничке автора - Дмитрия Шкарина (www.compression.ru, далее по
ссылкам).
Всего хорошего!
Дмитрий Козырев aka Master
* Origin: Дорогу осилит идущий. (2:5023/11.148)