私のアプリでは、いくつかの外部swfファイルを読み込む必要があります。私は次のコードを使用しました:壊れたswfファイルを読み込んでもエラーが表示されません
var file:File;
file = File.documentsDirectory.resolvePath("myfolder/myfile.swf");
if(file.exists)
{
var inFileStream:FileStream = new FileStream();
inFileStream.open(file, FileMode.READ);
var swfBytes:ByteArray = new ByteArray();
inFileStream.readBytes(swfBytes);
inFileStream.close();
var loaderContext:LoaderContext = new LoaderContext(false, new ApplicationDomain(null));
loaderContext.allowLoadBytesCodeExecution = true;
loaderContext.allowCodeImport = true;
myLoader = new Loader();
try
{
myLoader.loadBytes(swfBytes, loaderContext);
}
catch(e:Error)
{
trace("Can't read file.");
}
myLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, LoadComplete_swf);
myLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, loop, false, 0, true);
myLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,loadingError);
}
else
{
trace("File doesn't exists.");
}
すべて動作します。しかし、私は最近、私のswfファイルのいくつかが壊れていることを発見しました。これらのファイルをロードすると、完全なイベントがディスパッチされず、エラーもスローされません。だから、私の質問は、swfファイルが破損しているかどうかを見つける方法はありますか?はい、私はそれらの破損したswfファイルを置き換えることができます。このような問題が再び発生した場合の予防策にすぎません。現時点では、私が考えることができるのは、タイマーを作成し、完全なイベントがディスパッチされているかどうかをチェックすることです。そうでなければ、showはファイルメッセージを読むことができません。これに対処するより良い方法はありますか?
ファイルの整合性をテストするには、そのファイルをハッシュし、その結果を期待値と比較します。血まみれの暗号ライブラリが推奨されます。 – seventeen
このような場合、ドキュメントにIO_ERRORイベントが記述されています。 – Organis
@Organis、IO_ERRORは発砲しなかった。サイズのファイルがゼロだったときにのみ起動します。 – TheGunners