aspose.info
BG

ZIP

Обновено

Какво е ZIP файл?

Файл с разширение .zip е архив, който може да съдържа един или повече файлове или директории. Архивът може да има компресия, приложена към включените файлове, за да се намали размерът на ZIP файла. ZIP файловият формат беше направен публично достояние през февруари 1989 г. от Фил Кац за постигане на архивиране на файлове и папки. Форматът е част от PKZIP помощна програма, създадена от PKWARE, Inc. Веднага след наличността на наличните спецификации, много компании направиха ZIP файловия формат част от своите софтуерни помощни програми, включително Microsoft (след Windows 7), Apple (Mac OS X) и много други.

Кратка история на ZIP файловия формат

Историята на ZIP файловия формат датира от съдебното дело, заведено от System Enhancement Associates (SEA) срещу PKWARE за използване на неговата помощна програма ARC без разрешения за неговата търговска марка и авторските права върху външния вид на продукта и потребителския интерфейс. Преди това Фил Кац пренаписа изходния код на SEA и пусна PKXARC, ARC екстрактор, и PKARC, файлов компресор, като безплатен софтуер за системи, базирани на MS-DOS. Загубвайки делото, PKWARE не можеше да използва повече нищо, свързано с ARC. Това е мястото, където възниква създаването на нова компресия на файлове, наречена ZIP, която е направена част от помощната програма PKZIP в PKWARE, Inc.

Katz пусна спецификациите на ZIP файловия формат в обществено достояние, като същевременно запази правата на собственост върху своята програма за компресиране и извличане, т.е. PKZIP. Системата за компресиране на ZIP беше (и е) в състояние да архивира файлове в папка посредством алгоритъм за 32-битова циклична проверка за излишък (CRC) за компресиране на файл размери. За разлика от ARC, .ZIP папките включват файл с директория, който играе ролята на кодова книга на криптограф, съдържащ информацията, необходима за изобразяване на компресираните файлове.

Поддържани методи за компресиране в ZIP

Според спецификациите на файловия формат .ZIP се поддържат следните методи за компресиране.

  • Store - предполага липса на компресия
  • Свиване
  • Намаляване (Това предполага фактори на компресия, вариращи от ниво 1 до ниво 4)
  • Експлозия
  • Изпускане на въздух
  • Дефлат64
  • BZIP2
  • LZMA (EFS)
  • WavPack
  • PPMd версия I, Rev 1

DEFLATE е често използваният метод за компресиране, който е алгоритъм за компресиране на дата без загуби, който използва комбинация от кодиране LZ77 и Huffman и е описан подробно в RFC 1951.

Спецификации на ZIP файлов формат

ZIP файловете имат възможност да съхраняват множество файлове, използвайки различни техники за компресиране, като в същото време поддържат съхранение на файл без компресия. Всеки файл се съхранява/компресира индивидуално, което помага за извличането им или добавянето на нови, без да се прилага компресия или декомпресия към целия архив.

Цялостен ZIP файлов формат

Всеки Zip файл е структуриран по следния начин:

ZIP файлов формат
Заглавка на локален файл 1
Данни на файла 1
Дескриптор на данни 1
Заглавка на локален файл 2
Данни на файла 2
Дескриптор на данни 2
….
….
Заглавка на локален файл N
Файл с данни N
Дескриптор на данни N
Заглавка за декриптиране на архив
Архивиране на допълнителни данни
Централна директория

ZIP файловият формат използва 32-битов CRC алгоритъм за целите на архивирането. За да изобрази компресираните файлове, ZIP архивът съдържа директория в своя край, която пази записа на съдържащите се файлове и тяхното местоположение в архивния файл. По този начин той играе ролята на кодиране за капсулиране на информация, необходима за изобразяване на компресираните файлове. ZIP четците използват директорията, за да заредят списъка с файлове, без да четат целия ZIP архив. Форматът запазва двойни копия на структурата на директорията, за да осигури по-голяма защита срещу загуба на данни.

Всеки файл в ZIP архив е представен като отделен запис, където всеки запис се състои от заглавка на локален файл, последвана от компресираните данни за файла. Директорията в края на архива съдържа препратките към всички тези файлови записи. Четеците на ZIP файлове трябва да избягват да четат заглавките на локалните файлове и всички видове списъци с файлове трябва да се четат от директорията. Тази директория е единственият източник за валидни записи на файлове в архива, тъй като файловете могат да се добавят и към края на архива. Ето защо, ако четец чете локални заглавки на ZIP архив от самото начало, той може да прочете невалидни (изтрити) записи, както и тези, които не са част от Директорията, която се изтрива от архива.

Редът на записите на файловете в централната директория не трябва да съвпада с реда на записите на файловете в архива.

Записи в ZIP файлове

Записите в ZIP файла са подредени един след друг, като всеки запис се състои от:

  • Заглавка на локален файл
  • Незадължителни допълнителни полета с данни
  • Потребителски данни (по избор компресирани/по избор криптирани)

Заглавието на локалния файл на всеки запис представлява информация за файла като коментар, размер на файла и име на файл. Допълнителните полета за данни (по избор) могат да съдържат информация за опции за разширяване на ZIP формата.

Заглавка на локален файл

Заглавката на локалния файл има специфична структура на полето, състояща се от многобайтови стойности. Всички стойности се съхраняват в ред на байтовете от малък край, където дължината на полето брои дължината в байтове. Всички структури в ZIP файл използват 4-байтови подписи за всеки запис във файла. Краят на сигнатурата на централната директория е 0x06054b50 и може да се различи с помощта на собствения си уникален подпис. Следва редът на информацията, съхранявана в заглавката на локалния файл.

ОтместванеБайтовеОписание
04Подпис на заглавката на локалния файл # 0x04034b50 (разчетено като число от малкия край)
42Необходима версия за извличане (минимум)
62Флаг за битове с общо предназначение
82Метод на компресиране
102Време на последната модификация на файла
122Дата на последна промяна на файла
144CRC-32
184Компресиран размер
224Некомпресиран размер
262Дължина на името на файла (n)
282Допълнителна дължина на полето (m)
30nИме на файл
30+nmДопълнително поле

Заглавка на файла на централната директория

ОтместванеБайтовеОписание
04Сигнатура на заглавния файл на централната директория # 0x02014b50
42Версия, направена от
62Необходима версия за извличане (минимум)
82Флаг за битове с общо предназначение
102Метод на компресиране
122Време на последната модификация на файла
142Дата на последна промяна на файла
164CRC-32
204Компресиран размер
244Некомпресиран размер
282Дължина на името на файла (n)
302Допълнителна дължина на полето (m)
322Дължина на коментара на файла (k)
342Номер на диска, където започва файлът
362Вътрешни файлови атрибути
384Външни файлови атрибути
424Относително отместване на заглавката на локалния файл. Това е броят байтове между началото на първия диск, на който се намира файлът, и началото на заглавката на локалния файл. Това позволява на софтуера да чете централната директория, за да намери позицията на файла в ZIP файла.
46nИме на файл
46+nmДопълнително поле
46+n+mkКоментар на файла

Край на записа на централната директория

ОтместванеБайтовеОписание
04Край на сигнатурата на централната директория # 0x06054b50
42Номер на този диск
62Диск, където започва централната директория
82Брой записи в централната директория на този диск
102Общ брой записи в централната директория
124Размер на централната директория (байтове)
164Отместване на началото на централната директория спрямо началото на архива
202Дължина на коментара (n)
22nКоментар

Препратки

Вижте също