zip檔案格式

2021-09-30 18:33:51 字數 1854 閱讀 2682

原文: 

zip檔案格式

說明本人根據自己的學習過程,適當理解,並作下筆記,以便查閱。這裡暫不包含zip64部分。

整體結構

簡單歸納總結下,zip檔案格式由檔案資料區、**目錄結構,**目錄結束標誌組成。其中**目錄結束節又有乙個字段儲存了**目錄結構的偏移。整體結構如下圖 

分割槽描述

**目錄結束標誌

**目錄結束標誌一般位於檔案的末尾。由於它也有字段指向了**目錄開始處的偏移, 所以把它放在最前面描述。它被用來標識**目錄結束。可以通過讀取它來找到**目錄並解析整個檔案結構。該結構具體如下:

struct endlocator

;**目錄結構

**目錄結構位於檔案資料區後,它用來儲存所有檔案的路徑資訊,和對應檔案資料結構區在檔案中的偏移。該結構具體如下:

struct direntry

;**目錄結構區是由**目錄結構的陣列組成,這個結構只有目錄檔名,擴充套件域,檔案注釋內容長度是不定的,並且可以在這個結構中獲取它的長度,那麼通過此就可以遍歷出所有的檔案。設當前**目錄結構偏移為current_offset,下個**目錄結構偏移為next_offset,則計算公式為:

next_offset = current_offset + sizeof(direntry) - 3*sizeof(char*) + defilenamelength + deextrafieldlength + defilecommentlength;

其中crc32校驗碼為對應的檔案壓縮資料的crc32的校驗碼,如對應檔案的資料壓縮資料的crc32與這裡的值不同,則資料損壞。 

通過**目錄結構的deheaderoffset欄位可以直接獲取到對應檔案的檔案資料區結構的檔案偏移,就可以直接獲取到對應檔案的壓縮資料了。

檔案資料區

檔案資料區是儲存所有壓縮檔案資料的區,它位於檔案頭,並由壓縮資料結構的陣列組成。其結構如下:

struct record

;這裡的壓縮方式frcompression有如下取值:

0 - the file is stored (no compression)

1 - the file is shrunk

2 - the file is reduced with compression factor 1

3 - the file is reduced with compression factor 2

4 - the file is reduced with compression factor 3

5 - the file is reduced with compression factor 4

6 - the file is imploded

7 - reserved for tokenizing compression algorithm

8 - the file is deflated

9 - enhanced deflating using deflate64(tm)

10 - pkware data compression library imploding

11 - reserved by pkware

12 - file is compressed using bzip2 algorithm

通過**目錄結構就可以找到檔案資料結構,通過檔案資料結構獲取到壓縮資料結構,並通過此結構可以獲取到壓縮的資料和使用的演算法,並可以根據此解壓出對應的資料。

crc32

crc32即迴圈冗餘校驗,一般用於校驗資料是否正確。其實現方式參考

總結zip檔案結構比較清晰,可以從位於檔案尾的**檔案目錄結束區入手,獲取到**目錄結構的偏移位址,再遍歷**目錄獲取到所有的檔案,並通過檔案資料結構獲取到檔案資料,資料是否損壞可通過crc32進行校驗。

ZIP檔案格式詳解

乙個 zip 檔案的普通格式 乙個 zip 檔案由三個部分組成 壓縮原始檔資料區 壓縮源檔案目錄區 壓縮源檔案目錄結束標誌 1 壓縮原始檔資料區 在這個資料區中每乙個壓縮的原始檔 目錄都是一條記錄,記錄的格式如下 檔案頭 檔案資料 資料描述符 a 檔案頭結構 組成 長度 檔案頭標記 4 bytes ...

Oracle 控制檔案格式ctl檔案格式

options skip 1,errors 10 load data characterset zhs16gbk infile into table table name truncate fields terminated by optionally enclosed by trailing nu...

檔案格式 gff格式

gff檔案格式 gff格式是 sanger 研究所定義,是一種簡單的 方便的對於 dna rna以及蛋白質序列的特徵進行描述的一種資料格式,已經成為序列注釋的通用格式,比如基因組的基因 許多軟體都支援輸入或者輸出gff格式。前格式定義的最新版本是版本3。原始定義見 song websitegff是存...