使用fzip读/写as3 zip

时间:2012-07-20 08:58:06

标签: actionscript-3 zip

我正在AIR中创建自定义文件类型,这是一个不同扩展名下的zip文件。我一直在尝试一些库,并以Fzip为基础。这是为了存放我的应用程序项目文件。

测试似乎运行正常,除了偶尔会收到'未知记录签名'错误。 我想知道我是否遗漏了某些东西,也许有人可以解释一下。我第一次尝试这样的事情。

它似乎随机发生,我有一个基本的应用程序,允许您在运行时添加新文件。内容显示在列表中,选择后查看文本内容。 有时添加新文件,保存,然后重新打开,我得到这个未知的记录错误。可能是原因的主要功能

    private function openComplete( event:Event ):void {
        _zipFile.loadBytes( _file.data );
        dispatch( new ZipServiceEvent( ZipServiceEvent.CONTENTS_CHANGE ) );
    }
    public function saveFile( event:Event=null ):void {
        if( _file.isDirectory ) {
            browseForSave();
            return void;
        }
        if ( _file.extension != _ext )
            _file = new File( _file.nativePath + _ext );
        var stream:FileStream = new FileStream();
        stream.open( _file, FileMode.WRITE );
        _zipFile.serialize( stream );
        stream.close();
    }
    public function getFile( name:String ):FZipFile {
        return _zipFile.getFileByName( name );
    }

    public function addFile( name:String, contents:ByteArray ):void {
        _zipFile.addFile( name, contents );
    }
    private function saveFileHandler( event:Event ):void {
        var contents:ByteArray = new ByteArray();
        contents.writeMultiByte( view.filecontents.text, 'utf-8' );
        model.addFile( view.filename.text, contents );
    }

1 个答案:

答案 0 :(得分:1)

我需要测试你的课程以查找错误...我没有时间检查它,但同时我会发布我为此目的创建的Util类。它不是很广泛,只是为了一个小项目,但它可以帮助你...

package com.models
{
    import com.events.AppEvent;

    import deng.fzip.FZip;

    import flash.events.Event;
    import flash.events.EventDispatcher;
    import flash.events.IEventDispatcher;
    import flash.utils.ByteArray;

    public class ZIPEncoder extends EventDispatcher
    {
        private var _zip:FZip;
        private var _compressedBytes:ByteArray = new ByteArray();

        public function ZIPEncoder(target:IEventDispatcher=null)
        {
            super(target);
        }

        public function newZip(name:String = ""):void
        {
            if(_zip) _zip = null;
            _zip = new FZip();
            _zip.addEventListener(Event.COMPLETE, onZipComplete);
        }

        public function newEntry(name:String, bytes:ByteArray):void
        {
            if(_zip == null)
            {
                throw(new Error("No zipOutput initialized. Call newZip() to initialize a new ZipOutput object before creating entry instances"));
                return;
            }
            _zip.addFile(name, bytes);
        }

        public function compress():void
        {
            _zip.serialize(_compressedBytes, false);
            dispatchEvent(new AppEvent(AppEvent.ZIP_ENCODED, _compressedBytes));
        }

        private function onZipComplete(event:Event):void
        {
            dispatchEvent(new AppEvent(AppEvent.ZIP_ENCODED, _compressedBytes));
        }
        //public function get zip():ZipOutput { return _zip; }
    }
}
希望它有所帮助...