aspose.info
CS

ZIP

Aktualizováno

Co je to soubor ZIP?

Soubor s příponou .zip je archiv, který může obsahovat jeden nebo více souborů nebo adresářů. Archiv může mít kompresi aplikovanou na zahrnuté soubory, aby se zmenšila velikost souboru ZIP. Formát souboru ZIP byl zveřejněn již v únoru 1989 Philem Katzem pro dosažení archivace souborů a složek. Formát byl součástí nástroje PKZIP, vytvořeného společností PKWARE, Inc. Hned po zpřístupnění dostupných specifikací, mnoho společností učinilo souborový formát ZIP součástí svých softwarových nástrojů, včetně Microsoftu (od Windows 7), Apple (Mac OS X) a mnoha dalších.

Stručná historie formátu souboru ZIP

Historie formátu souboru ZIP sahá až k případu soudního sporu vedeného společností System Enhancement Associates (SEA) proti společnosti PKWARE za použití jejího nástroje ARC bez povolení k její ochranné známce a autorských práv ke vzhledu produktu a uživatelskému rozhraní. Předtím Phil Katz přepsal zdrojový kód SEA a vydal PKXARC, ARC extraktor, a PKARC, souborový kompresor, jako freeware pro systémy založené na MS-DOS. Po prohraném soudním sporu už PKWARE nemohl používat nic, co by se týkalo ARC. Zde vznikla nová komprimace souborů pojmenovaná jako ZIP, která byla součástí nástroje PKZIP společnosti PKWARE, Inc.

Katz uvolnil specifikace formátu souboru ZIP do veřejné domény, přičemž si ponechal vlastnická práva na svůj nástroj pro kompresi a extrakci, tj. PKZIP. Kompresní systém ZIP byl (a je) schopen archivovat soubory ve složce pomocí algoritmu 32bitové cyklické kontroly redundance (CRC) pro kompresi souboru velikosti. Na rozdíl od ARC obsahovaly složky .ZIP adresářový soubor, který hrál roli kódové knihy kryptografa a obsahoval informace potřebné k vykreslení komprimovaných souborů.

Podporované kompresní metody v ZIP

Podle specifikací formátu souboru .ZIP jsou podporovány následující metody komprese.

  • Store - neznamená žádnou kompresi
  • Zmenšit
  • Redukce (To znamená kompresní faktory v rozsahu od úrovně 1 do úrovně 4)
  • Implodovat
  • Vyfouknout *Deflat64
  • BZIP2
  • LZMA (EFS)
  • WavPack
  • PPMd verze I, Rev 1

DEFLATE je běžně používaná metoda komprese, což je bezztrátový algoritmus komprese data, který používá kombinaci kódování LZ77 a Huffman a je podrobně popsán v RFC 1951.

Specifikace formátu souboru ZIP

Soubory ZIP mají schopnost ukládat více souborů pomocí různých technik komprese a zároveň podporují ukládání souboru bez jakékoli komprese. Každý soubor je uložen/komprimován jednotlivě, což pomáhá jeho extrahování nebo přidávání nových, aniž by bylo nutné komprimovat nebo dekompresovat celý archiv.

Celkový formát souboru ZIP

Každý soubor ZIP je strukturován následujícím způsobem:

Formát souboru ZIP
Záhlaví místního souboru 1
Data souboru 1
Deskriptor dat 1
Záhlaví místního souboru 2
Data souboru 2
Datový deskriptor 2
….
….
Záhlaví místního souboru N
Data souboru N
Datový deskriptor N
Záhlaví dešifrování archivu
Archivujte další záznam dat
Centrální adresář

Formát souboru ZIP používá pro účely archivace 32bitový algoritmus CRC. Aby bylo možné vykreslit komprimované soubory, archiv ZIP má na svém konci adresář, který uchovává záznam obsažených souborů a jejich umístění v archivním souboru. Hraje tedy roli kódování pro zapouzdření informací nezbytných k vykreslení komprimovaných souborů. Čtečky ZIP používají adresář k načtení seznamu souborů bez čtení celého ZIP archivu. Formát uchovává duální kopie adresářové struktury, aby byla zajištěna větší ochrana před ztrátou dat.

Každý soubor v archivu ZIP je reprezentován jako samostatná položka, kde každá položka se skládá z hlavičky místního souboru následované daty komprimovaného souboru. Adresář na konci archivu obsahuje odkazy na všechny tyto položky souboru. Čtenáři souborů ZIP by se měli vyvarovat čtení záhlaví místních souborů a všechny druhy výpisů souborů by měly být načteny z adresáře. Tento adresář je jediným zdrojem platných záznamů souborů v archivu, protože soubory lze přidávat i ke konci archivu. Pokud tedy čtenář čte lokální hlavičky ZIP archivu od začátku, může číst i neplatné (smazané) záznamy a také ty, které nejsou součástí Adresáře odstraňovaného z archivu.

Pořadí položek souborů v centrálním adresáři se nemusí shodovat s pořadím položek souborů v archivu.

Položky souboru ZIP

Záznamy v souboru ZIP jsou uspořádány za sebou, přičemž každý záznam se skládá z:

  • Záhlaví místního souboru
  • Volitelná doplňková datová pole
  • Uživatelská data (volitelně komprimovaná/volitelně šifrovaná)

Záhlaví místního souboru každé položky představuje informace o souboru, jako je komentář, velikost souboru a název souboru. Další datová pole (volitelná) mohou obsahovat informace o možnostech rozšiřitelnosti formátu ZIP.

Záhlaví místního souboru

Záhlaví místního souboru má specifickou strukturu polí sestávající z vícebajtových hodnot. Všechny hodnoty jsou uloženy v pořadí bajtů typu little-endian, kde délka pole počítá délku v bajtech. Všechny struktury v souboru ZIP používají 4bajtové podpisy pro každou položku souboru. Konec podpisu centrálního adresáře je 0x06054b50 a lze jej rozlišit pomocí vlastního jedinečného podpisu. Následuje pořadí informací uložených v záhlaví místního souboru.

OffsetBajtyPopis
04Podpis záhlaví místního souboru # 0x04034b50 (čteno jako číslo little-endian)
42Verze potřebná k extrahování (minimum)
62Příznak bitu pro obecné použití
82Metoda komprese
102Uložit čas poslední úpravy
122Uložit datum poslední úpravy
144CRC-32
184Stlačená velikost
224Nekomprimovaná velikost
262Délka názvu souboru (n)
282Délka pole navíc (m)
30nNázev souboru
30+nmPole navíc

Záhlaví souboru centrálního adresáře

OffsetBajtyPopis
04Podpis hlavičky souboru centrálního adresáře # 0x02014b50
42Verze od
62Verze potřebná k extrahování (minimum)
82Příznak bitu pro obecné použití
102Metoda komprese
122Uložit čas poslední úpravy
142Uložit datum poslední změny
164CRC-32
204Stlačená velikost
244Nekomprimovaná velikost
282Délka názvu souboru (n)
302Délka pole navíc (m)
322Délka komentáře souboru (k)
342Číslo disku, kde soubor začíná
362Atributy interního souboru
384Atributy externích souborů
424Relativní posun záhlaví lokálního souboru. Toto je počet bajtů mezi začátkem prvního disku, na kterém se soubor vyskytuje, a začátkem záhlaví místního souboru. To umožňuje softwaru číst centrální adresář k nalezení pozice souboru uvnitř souboru ZIP.
46nNázev souboru
46+nmPole navíc
46+n+mkKomentář souboru

Konec záznamu centrálního adresáře

OffsetBajtyPopis
04Konec podpisu centrálního adresáře # 0x06054b50
42Číslo tohoto disku
62Disk, na kterém začíná centrální adresář
82Počet záznamů centrálního adresáře na tomto disku
102Celkový počet záznamů centrálního adresáře
124Velikost centrálního adresáře (bajty)
164Posun začátku centrálního adresáře vzhledem k začátku archivu
202Délka komentáře (n)
22nKomentář

Reference

Viz také