ZIP文件格式詳解(一)——文件數據格式
?ZIP文件格式詳解(一)——文件數據格式
----------------------------------------------------------------------------------
文檔說明
ZIP 格式的壓縮文件是我們常用的壓縮格式之一,他以其通用性、壓縮比高而在全球范圍內有很多的用戶,本文簡單介紹 ZIP 文件格式和算法。本文主要參照http://www.pkware.com/ 提供的 appnote.txt 文件,你可以從http://www.pkware.com/download.html 下載 appnote.zip 得到這個文件。
作者:昏睡終日(Seread@163.com)
2002-10-28
本文僅作為技術參考資料,我盡力的保證文檔的內容同原始技術文檔在結構和描述上的一致,若有不當的地方請見諒。
本文檔的作者不為使用本文檔信息所造成的任何損失負責。
----------------------------------------------------------------------------------
?
一個 ZIP 文件的普通格式
----------------------
??? 一個 ZIP 文件由三個部分組成:
????????
??????? 壓縮源文件數據區+壓縮源文件目錄區+壓縮源文件目錄結束標志
?
?
????1、壓縮源文件數據區
??? 在這個數據區中每一個壓縮的源文件/目錄都是一條記錄,記錄的格式如下:
??????
?????? [文件頭+ 文件數據 + 數據描述符]
?
?????? a、文件頭結構
?????????組成???? ??????????????? 長度
??????文件頭標記??? ????????????? 4 bytes? (0x04034b50)
??????解壓文件所需 pkware 版本??? 2 bytes
????? 全局方式位標記????????????? 2 bytes
?? 壓縮方式????????????????? ??2 bytes
? 最后修改文件時間???????????? 2 bytes
? 最后修改文件日期???????????? 2 bytes
? ?CRC-32校驗???????????????? ?4 bytes
? 壓縮后尺寸??????????????????4 bytes
? 未壓縮尺寸??????????????????4 bytes
? 文件名長度?????????????? ???2 bytes
????? 擴展記錄長度???????? ? ??? 2 bytes
? 文件名???????????????????? (不定長度)
? 擴展字段???????????????? ??(不定長度)
?
??????? b、文件數據
?
???????
??????? c、數據描述符
? 組成???? 長度
?? CRC-32校驗????????????????? 4 bytes
? 壓縮后尺寸?????????????????? 4 bytes
? 未壓縮尺寸?????????????????? 4 bytes
? ??? 這個數據描述符只在全局方式位標記的第3位設為1時才存在(見后詳解),緊接在壓縮數據的最后一個字節后。這個數據描述符只用在不能對輸出的 ZIP 文件進行檢索時使用。例如:在一個不能檢索的驅動器(如:磁帶機上)上的 ZIP 文件中。如果是磁盤上的ZIP文件一般沒有這個數據描述符。
???? 2、壓縮源文件目錄區
???? 在這個數據區中每一條紀錄對應在壓縮源文件數據區中的一條數據
?
?? 組成?? ??? ??? ??? ??????????? 長度
??? 目錄中文件文件頭標記??? ? ?????? 4 bytes? (0x02014b50)
??? 壓縮使用的 pkware 版本????????? 2 bytes
??? 解壓文件所需 pkware 版本? ?????? 2 bytes
??? 全局方式位標記?? ??? ??????????? 2 bytes
??? 壓縮方式????????????????????????2 bytes
??? 最后修改文件時間??? ??????????? 2 bytes
??? 最后修改文件日期??? ??????????? 2 bytes
??? CRC-32校驗??? ??????????? 4 bytes
??? 壓縮后尺寸??????????????????????4 bytes
??? 未壓縮尺寸?? ??? ??? ?????????? 4 bytes
??? 文件名長度?? ??? ??? ?????????? 2 bytes
??? 擴展字段長度??? ?????????????? 2 bytes
??? 文件注釋長度??? ?????????????? 2 bytes
??? 磁盤開始號?? ??? ??? ?????????? 2 bytes
??? 內部文件屬性??? ?????????????? 2 bytes
??? 外部文件屬性??? ?????????????? 4 bytes
??? ??? 局部頭部偏移量??? ??? ????????? 4 bytes
??? 文件名?? ??? ??? ??????????? (不定長度)
??? 擴展字段??? ??? ??????????? (不定長度)
??? ??? 文件注釋??? ??? ??????????? (不定長度)
????3、壓縮源文件目錄結束標志
?
??? 組成?? ??? ??? ??? ????????? 長度
??? ??? 目錄結束標記??????????????????? 4 bytes? (0x02014b50)
??????? 當前磁盤編號?? ??? ??? ???????? 2 bytes
??? ??? 目錄區開始磁盤編號????????????? 2 bytes
??? 本磁盤上紀錄總數??? ? ?????????? 2 bytes
??? 目錄區中紀錄總數??????? ???????? 2 bytes
??? 目錄區尺寸大小?????????????????? 4 bytes
??? 目錄區對第一張磁盤的偏移量??????? 4 bytes
??? ZIP 文件注釋長度??? ??????????? 2 bytes
??? ZIP 文件注釋??? ????????????? (不定長度)
posted on 2008-09-04 14:53 死神 閱讀(1092) 評論(0) 編輯 收藏 所屬分類: 文件格式