帮助我一些人可以解压缩文件flex我们可以维护相同的目录结构。
答案 0 :(得分:0)
我使用了FZip,效果很好。在内部,它使用具有压缩功能的ByteArray。您可以通过将文件读入ByteArray来使用相同的技术。
答案 1 :(得分:0)
我得到了sollution,如果有人想要解压缩文件,只需通过动作脚本编写的代码。
包com.utils { 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 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();
}
}
}