我正在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 );
}
答案 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; }
}
}
希望它有所帮助...