0

帮帮我,我们可以解压缩文件 flex,我们可以保持相同的目录结构。

4

2 回答 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 回答