2017-09-08 9 views
0

私のアプリでは、いくつかの外部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はファイルメッセージを読むことができません。これに対処するより良い方法はありますか?

+0

ファイルの整合性をテストするには、そのファイルをハッシュし、その結果を期待値と比較します。血まみれの暗号ライブラリが推奨されます。 – seventeen

+0

このような場合、ドキュメントにIO_ERRORイベントが記述されています。 – Organis

+0

@Organis、IO_ERRORは発砲しなかった。サイズのファイルがゼロだったときにのみ起動します。 – TheGunners

答えて

1

ファイルが壊れていると、予期せぬ事態が起こる可能性があります。タイムアウトを設定すると、イベントをロードする問題を処理できません。 @seventeenが示唆するように、暗号ライブラリを使用してファイルハッシュを検証することができますが、これには比較するハッシュが既に必要であり、ロード完了イベントが発生する必要があります。

+0

私は比較するハッシュがありません。ファイルの総数はわかりませんので、ハッシュを保存することも問題になります。 – TheGunners

+0

次に、合理的なタイムアウトを設定することは意味があります。ファイルのサイズがわからないので、タイムアウトは、ロード完了だけでなく、ロードの進行によってもリセットする必要があります。 –

関連する問題