0

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 );
    }
4

1 に答える 1

1

エラーを探すためにあなたのクラスをテストする必要があります... チェックする時間はありませんが、それまでの間、この目的のために作成した Util クラスを投稿します。それほど広範囲ではありません。小さなプロジェクトのためのものでしたが、役に立つかもしれません…</p>

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; }
    }
}

お役に立てば幸いです…</p>

于 2012-07-20T10:37:03.833 に答える