package com.egnity
{
import flash.filesystem.File;
import flash.filesystem.FileMode;
import flash.filesystem.FileStream;
import flash.utils.ByteArray;
import flash.utils.CompressionAlgorithm;
import flash.utils.Endian;
public class UnzipFile
{
public function UnzipFile()
{
}
public function unzip(zipFilePath:String,targetPath:String):void{
var bytes:ByteArray= new ByteArray();
var flNameLenght:int;
var xfldLength:int;
var offset:int;
var compSize:int;
var uncompSize:Number;
var compMethod:Object;
var signature:int;
var output;
var flNameLength:int;
var fileName:String
var zipFile:File = new File(zipFilePath);
var zipStream:FileStream = new FileStream();
zipStream.open(zipFile,FileMode.READ);
bytes.endian = Endian.LITTLE_ENDIAN;
while(zipStream.position
zipStream.readBytes(bytes,0,30);
bytes.position =0;
signature = bytes.readInt();
if(signature!=0x04034b50){
break;
}
bytes.position=8;
compMethod = bytes.readByte();
offset = 0; // stores length of variable portion of metadata
bytes.position = 26; // offset to file name length
flNameLength = bytes.readShort(); // store file name
offset += flNameLength; // add length of file name
bytes.position = 28; // offset to extra field length
xfldLength = bytes.readShort();
offset += xfldLength; // add length of extra field
// read compressed file to offset 0 of bytes; for uncompressed files
// the compressed and uncompressed size is the same
// read variable length bytes between fixed-length header and compressed file data
zipStream.readBytes(bytes, 30, offset);
bytes.position = 30;
fileName = bytes.readUTFBytes(flNameLength); // read file name
output += fileName + "
"; // write file name to text area
bytes.position = 18;
compSize = bytes.readUnsignedInt(); // store size of compressed portion
output += "\tCompressed size is: " + compSize + '
';
bytes.position = 22; // offset to uncompressed size
uncompSize = bytes.readUnsignedInt(); // store uncompressed size
zipStream.readBytes(bytes, 0, compSize);
if (compMethod == 8) // if file is compressed, uncompress
{
bytes.uncompress(CompressionAlgorithm.DEFLATE);
}
outFile(fileName, bytes,targetPath); // call outFile() to write out the file
}
}
private function outFile(fileName:String, data:ByteArray,targetPath:String)
{
var outFile:File = new File(targetPath+"/"+fileName)
var outStream:FileStream = new FileStream();
// open output file stream in WRITE mode
outStream.open(outFile, FileMode.WRITE);
// write out the file
outStream.writeBytes(data, 0, data.length);
// close it
outStream.close();
}
}
}
kullanımı ise şöyle
var unzip:UnzipFile = new UnzipFile();
unzip.unzip(ornek.zip.hedefDirectory);
No comments:
Post a Comment