Работаем с архивами
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