帮帮我,我们可以解压缩文件 flex,我们可以保持相同的目录结构。
问问题
3152 次
2 回答
0
I have used FZip which works great. Internally it uses a ByteArray which has compression capabilities. You could probally use the same technique by reading the file into a ByteArray.
于 2009-12-23T05:35:14.633 回答
0
我得到了解决方案,如果有人想解压缩文件,只需通过这个用动作脚本编写的代码。
包 com.utils { 导入 flash.filesystem.File; 导入 flash.filesystem.FileMode;导入 flash.filesystem.FileStream;导入 flash.utils.ByteArray;导入 flash.utils.CompressionAlgorithm;导入 flash.utils.Endian;
public class ZIPDecoder
{
private var source:String;
private var fileName:String;
private var targetpath:String;
private var bytes:ByteArray=new ByteArray();
public function ZIPDecoder()
{
this.source=source;
this.targetpath=targetpath;
}
public function unzipFile(sourceFile,targetPath):void{
var flNameLength;
var xfldLength;
var offset;
var compSize;
var uncompSize;
var compMethod;
var signature;
var zfile:File = File.applicationStorageDirectory.resolvePath(sourceFile);
var zStream:FileStream = new FileStream();
zStream.open(zfile, FileMode.READ);
bytes.endian = Endian.LITTLE_ENDIAN;
while (zStream.position < zfile.size){
// read fixed metadata portion of local file header
zStream.readBytes(bytes, 0, 30);
bytes.position = 0;
signature = bytes.readInt();
// if no longer reading data files, quit
if (signature != 0x04034b50)
{
break;
}
bytes.position = 8;
compMethod = bytes.readByte(); // store compression method (8 == Deflate)
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 variable length bytes between fixed-length header and compressed file data
zStream.readBytes(bytes, 30, offset);
bytes.position = 30;
fileName = bytes.readUTFBytes(flNameLength); // read file name
if (fileName.substr(fileName.length - 1, 1) != '/')
{
bytes.position = 18;
compSize = bytes.readUnsignedInt(); // store size of compressed portion
bytes.position = 22; // offset to uncompressed size
uncompSize = bytes.readUnsignedInt(); // store uncompressed size
// read compressed file to offset 0 of bytes; for uncompressed files
// the compressed and uncompressed size is the same
zStream.readBytes(bytes, 0, compSize);
if (compMethod == 8 ) // if file is compressed, uncompress
{
bytes.uncompress(CompressionAlgorithm.DEFLATE);
}
writeFile(targetPath, fileName, bytes); // call outFile() to write out the file
}
}
}
public function writeFile(baseDir,fileName,data){
var outFile:File=File.applicationStorageDirectory;
outFile=outFile.resolvePath(baseDir+File.separator+fileName);
var outStream:FileStream=new FileStream();
outStream.open(outFile,FileMode.WRITE);
outStream.writeBytes(data, 0, data.length);
outStream.close();
}
}
}
于 2009-12-24T04:30:37.353 回答