• Авторизация


Работаем с архивами 20-02-2008 13:24 к комментариям - к полной версии - понравилось!



Работаем с ZIP-файлами
.




Структура ZIP-файла
.

ZIP файл состоит из последовательностей
записей четырех типов:

LOCREC, CENTREC, ENDREC, EXTREC

Каждая запись начинается с метки 'PK'
(0x504B) и типа записи:

    (0x0102) - CENTREC

    (0x0304) - LOCREC

    (0x0506) - ENDREC

    (0x0708) - EXTREC



Запись типа LOCREC (по 1 записи на каждый
упакованный файл (каталог) архива.)


Структура записи
:

- Version_Need_to_Extract_0 (1 байт)

- Version_Need_to_Extract_1 (1 байт)

    Номер версии Unzip определяется как
(Version_Need_to_Extract_0 / 10 + Version_Need_to_Extract_1 % 10)

- General_PurPose_Bit_Flag (2 байта)

    Универсальный битовый флаг, определяющий
платформу (ОС) и файловую структуру
исходных файлов

- Compression_Method (2 байта)

    Метод сжатия записи:

       
STORED = 0 (без сжатия)

        SHRUNK = 1

        REDUCED1 = 2

        REDUCED2 = 3

        REDUCED3 = 4

        REDUCED4 = 5

        IMPLODED = 6

        TOKENIZED = 7

        DEFLATED = 8

        ENHDEFLATED = 9

        DCLIMPLODED = 10

        PKRESMOD11 = 11

        BZIP2ED = 12

        NUM_METHODS = 13


- Last_Mod_DOS_DateTime (4 байта)

    Время последней модификации файла в
формате DOS

- CRC32 (4 байта)

    Контрольная сумма файла

- Compressed_Size (4 байта)

    Размер упакованного файла

- Uncompressed_Size (4 байта)

    Размер оригинального (распакованного)
файла

- FileName_Length (2 байта)

    Длина имени файла (включая путь от
центральной директории)

- Extra_Filed_Length (2 байта)

    Длина дополнительного поля

- Patch_and_FileName (длина определяется
полем FileName_Length)

    Путь от центральной директории и название
файла

- Extra_Filed (присутствует если
Extra_Filed_Length > 0)

    Дополнительная информация

- File_Pack (длина определяется полем
Compressed_Size)

    Упакованное (или оригинальное если
Compression_Method = 0) содержимое файла. (для
каталогов отсутствует)


Примечание
: если в General_PurPose_Bit_Flag
установлен бит (0x8), то поля CRC32, Compressed_Size и
Uncompressed_Size в LOCREC равны нулю, а
соответствующие значения берутся из CENREC




Запись типа CENREC (по 1 записи на каждый
упакованный файл (каталог) архива.)


Структура записи:


- Version_Made_By_0 (1 байт)

- Versoin_Made_By_1 (1 байт)

    Номер версии Zip определяется как
(Version_Made_By_0 / 10 + Version_Made_By_1 % 10)

- Version_Need_to_Extract_0 (1 байт)

- Version_Need_to_Extract_1 (1 байт)

    Номер версии Unzip определяется как
(Version_Need_to_Extract_0 / 10 + Version_Need_to_Extract_1 % 10)

- General_PurPose_Bit_Flag (2 байта)

    Универсальный битовый флаг, определяющий
платформу (ОС) и файловую структуру
исходных файлов

- Compression_Method (2 байта)

    Метод сжатия записи

- Last_Mod_DOS_DateTime (4 байта)

    Время последней модификации файла в
формате DOS

- CRC32 (4 байта)

    Контрольная сумма файла

- Compressed_Size (4 байта)

    Размер упакованного файла

- Uncompressed_Size (4 байта)

    Размер оригинального (распакованного)
файла

- FileName_Length (2 байта)

    Длина имени файла (включая путь от
центральной директории)

- Extra_Filed_Length (2 байта)

    Длина дополнительного поля

- File_Comments_Length (2 байта)

    Длина комментария

- Disk_Number_Start (2 байта)

- Internal_File_Attributes (2 байта)

- External_File_Attributes (4 байта)

- Relative_Offset_Local_Header (4 байта)

    Смешение соответствующей записи LOCREC от
начала архива

- Patch_and_FileName (длина определяется
полем FileName_Length)

    Путь от центральной директории и название
файла

- Extra_Filed (присутствует если
Extra_Filed_Length > 0)

    Дополнительная информация

 

Запись типа ENDREC (1 на весь архив)


Структура записи:


- Number_This_Disk (2 байта)

- Num_Disk_With_Start_Central_Dir (2 байта)

- Num_Entries_Centrl_Disk_Dir_Ths_Disk (2 байта)

- Total_Entries_Central_Dir (2 байта)

    Число записей (файлов и директорий) в
архиве

- Size_Central_Directory (4 байта)

- Offset_start_Central_Directory (4 байта)

- ZipFile_Comment_Length (2 байта)

    Длина комментария (должна быть не больше
62000 байт)

- Comment (длина определяется полем
ZipFile_Comments_Length)

    Комментарий к архиву



Запись типа EXTREC (по 1 на каждый файл,
встречается, если архив закрыт паролем)


Структура записи:


- CRC32 (4 байта)

    Контрольная сумма файла

- Compressed_Size (4 байта)

    Размер упакованного файла

- Uncompressed_Size (4 байта)

    Размер распакованного файла

вверх^ к полной версии понравилось! в evernote


Вы сейчас не можете прокомментировать это сообщение.

Дневник Работаем с архивами | _Программирование_ - Дневник _Программирование_ | Лента друзей _Программирование_ / Полная версия Добавить в друзья Страницы: раньше»