




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
\o"PermanentLink:Flex中實(shí)現(xiàn)對ZIP文件的解析"Flex中實(shí)現(xiàn)對ZIP文件的解析By
Minidxer
|January24,2009要實(shí)現(xiàn)對ZIP文件的解析,首先我們需要來了解一下ZIP文件的數(shù)據(jù)結(jié)構(gòu)。
簡單的說,一個(gè)ZIP文件的普通格式由三個(gè)部分組成:壓縮源文件數(shù)據(jù)區(qū)+壓縮源文件目錄區(qū)+壓縮源文件目錄結(jié)束標(biāo)志。
1、壓縮源文件數(shù)據(jù)區(qū)
在這個(gè)數(shù)據(jù)區(qū)中每一個(gè)壓縮的源文件/目錄都是一條記錄,記錄的格式如下:
[文件頭+文件數(shù)據(jù)+數(shù)據(jù)描述符]
a、文件頭結(jié)構(gòu)
組成長度
文件頭標(biāo)記4bytes(0×04034b50)
解壓文件所需pkware版本2bytes
全局方式位標(biāo)記2bytes
壓縮方式2bytes
最后修改文件時(shí)間2bytes
最后修改文件日期2bytes
CRC-32校驗(yàn)4bytes
壓縮后尺寸4bytes
未壓縮尺寸4bytes
文件名長度2bytes
擴(kuò)展記錄長度2bytes
文件名(不定長度)
擴(kuò)展字段(不定長度)
b、文件數(shù)據(jù)
c、數(shù)據(jù)描述符
組成長度
CRC-32校驗(yàn)4bytes
壓縮后尺寸4bytes
未壓縮尺寸4bytes
這個(gè)數(shù)據(jù)描述符只在全局方式位標(biāo)記的第3位設(shè)為1時(shí)才存在(見后詳解),緊接在壓縮數(shù)據(jù)的最后一個(gè)字節(jié)后。這個(gè)數(shù)據(jù)描述符只用在不能對輸出的ZIP文件進(jìn)行檢索時(shí)使用。例如:在一個(gè)不能檢索的驅(qū)動器(如:磁帶機(jī)上)上的ZIP文件中。如果是磁盤上的ZIP文件一般沒有這個(gè)數(shù)據(jù)描述符。
2、壓縮源文件目錄區(qū)
在這個(gè)數(shù)據(jù)區(qū)中每一條紀(jì)錄對應(yīng)在壓縮源文件數(shù)據(jù)區(qū)中的一條數(shù)據(jù)
組成長度
目錄中文件文件頭標(biāo)記4bytes(0×02014b50)
壓縮使用的pkware版本2bytes
解壓文件所需pkware版本2bytes
全局方式位標(biāo)記2bytes
壓縮方式2bytes10
最后修改文件時(shí)間2bytes12
最后修改文件日期2bytes14
CRC-32校驗(yàn)4bytes18
壓縮后尺寸4bytes22
未壓縮尺寸4bytes26
文件名長度2bytes28
擴(kuò)展字段長度2bytes30
文件注釋長度2bytes32
磁盤開始號2bytes34
內(nèi)部文件屬性2bytes36
外部文件屬性4bytes38
局部頭部偏移量4bytes42
文件名(不定長度)46
擴(kuò)展字段(不定長度)
文件注釋(不定長度)
3、壓縮源文件目錄結(jié)束標(biāo)志
組成長度
目錄結(jié)束標(biāo)記4bytes(0×06054b50)
當(dāng)前磁盤編號2bytes4
目錄區(qū)開始磁盤編號2bytes6
本磁盤上紀(jì)錄總數(shù)2bytes8
目錄區(qū)中紀(jì)錄總數(shù)2bytes10
目錄區(qū)尺寸大小4bytes12
目錄區(qū)對第一張磁盤的偏移量4bytes16
ZIP文件注釋長度2bytes20
ZIP文件注釋(不定長度)
下面是實(shí)現(xiàn)代碼:<?xml
version="1.0"
encoding="utf-8"?><mx:Window
xmlns:mx="/2006/mxml"
title="分析ZIP文件"
layout="vertical"
width="500"
height="300"
creationComplete="init();"><mx:Script><![CDATA[importflash.filesystem.*;importflash.utils.ByteArray;importflash.events.Event;privatevarbytes:ByteArray=newByteArray();
//定義用來存儲文件標(biāo)頭中元數(shù)據(jù)的變量variablesforreadingfixedportionoffileheaderprivatevarfileName:String=newString();privatevarflNameLength:uint;privatevarxfldLength:uint;
zStream.readBytes(bytes,0,flen+externlen+showlen);
if((zStream.position+30)<zfile.size){
zStream.readBytes(bytes,0,30);
bytes.position=0;
signature=bytes.readInt();
}else{
break;
}
}
zStream.readBytes(bytes,0,22);
bytes.position=0;
signature=bytes.readInt();
if(signature==0x06054b50){//目錄結(jié)束標(biāo)志
bytes.position=20;
showlen=bytes.readByte();
trace("bytes.showlen="+showlen);
zStream.readBytes(bytes,22,showlen);
bytes.position=22;
fileName=bytes.readMultiByte(showlen,"gbk");
taFiles.text+="\n注釋:"+fileName;
}
}//endofinit()method
privatefunctionoutFile(fileName:String,data:ByteArray):void{
varoutFile:File=File.desktopDirectory;//destfolderisdesktop
outFile=outFile.resolvePath(fileName);//nameoffiletowrite
varoutStream:FileStream=newFileStream();
//openoutputfilestreaminWRITEmode
outStream.open(outFile,FileMode.WRITE);
//writeoutthefile
outStream.writeBytes(data,0,data.length);
//closeit
outStream.close();}
privatefunctionselectTextFile(root:File):void
{
taFiles.text="";
vartxtFilter:FileFilter=newFileFilter("Zip","*.Zip;*.zip");
root.browseForOpen("Open",[txtFilter]);
root.addEventListener(Event.SELECT,fileSelected);
}
privatefunctionfileSelected(event:Event):void
{
msg.text="讀文件:"+event.target.nativePath;
}//Theapplicationcodegoeshere]]></mx:Script><mx:Label
id="msg"
text="只是測試
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 國開《金融學(xué)》單元測試二
- 課題開題報(bào)告:成人教育與繼續(xù)教育比較研究
- 課題開題報(bào)告:不同行業(yè)在職人員繼續(xù)教育制度和激勵機(jī)制研究
- 醫(yī)務(wù)室機(jī)器人企業(yè)制定與實(shí)施新質(zhì)生產(chǎn)力戰(zhàn)略研究報(bào)告
- 公對公匯款合同模板(2025年度)-跨境貿(mào)易結(jié)算
- 醫(yī)學(xué)級護(hù)腳膏制造行業(yè)跨境出海戰(zhàn)略研究報(bào)告
- 二零二五年度企業(yè)個(gè)人借款合同執(zhí)行監(jiān)督及反饋機(jī)制
- 二零二五年度大型商場消防安全評估與設(shè)計(jì)合同
- 學(xué)校健康機(jī)器人行業(yè)跨境出海戰(zhàn)略研究報(bào)告
- 二零二五年度農(nóng)村公共服務(wù)設(shè)施補(bǔ)貼協(xié)議
- 2024年黑龍江職業(yè)學(xué)院高職單招語文歷年參考題庫含答案解析
- 股指期貨基礎(chǔ)知識介紹培訓(xùn)課件
- 2024年北京東城社區(qū)工作者招聘筆試真題
- 2025中智集團(tuán)招聘重要崗位高頻重點(diǎn)提升(共500題)附帶答案詳解
- xx學(xué)校培訓(xùn)部工作職責(zé)
- T-GXAR 005-2024 制冷機(jī)房運(yùn)行維護(hù)規(guī)程
- 開工第一課安全培訓(xùn)總結(jié)精彩
- 二級WPS Office高級應(yīng)用與設(shè)計(jì)計(jì)算機(jī)等級考試試題與參考答案(2024年)
- 電子商務(wù)專業(yè)綜合技能測試題(附參考答案)
- 前程無憂測評題庫及答案
- 全腦血管造影術(shù)的護(hù)理查房
評論
0/150
提交評論