Flex中實(shí)現(xiàn)對ZIP文件的解析_第1頁
Flex中實(shí)現(xiàn)對ZIP文件的解析_第2頁
Flex中實(shí)現(xiàn)對ZIP文件的解析_第3頁
Flex中實(shí)現(xiàn)對ZIP文件的解析_第4頁
Flex中實(shí)現(xiàn)對ZIP文件的解析_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論