2016-08-06 9 views
0

あるディレクトリから別のディレクトリにjpgファイルをコピーできるコードを作成しようとしています。私が気にしているのは、選択されたjpgをバイトにロードし、その後writebytesを介して指定のフォルダに書き込むことです。これはデスクトップのAIRアプリケーションです。Adob​​e Air FileStream 1つのディレクトリから別のディレクトリへのjpgのコピー

private function update_treebg(event:MouseEvent):void { 
     saveDir = 'structure/' + id + '/bg.jpg'; 
     file.addEventListener(Event.SELECT, onFileSelected); 
     file.browseForOpen("Select an image", [imgFilter]); 
    } 

    private function onFileSelected(event:Event):void { 
     file.removeEventListener(Event.SELECT, onFileSelected); 
     fs.open(event.target as File, FileMode.READ); 
     fs.readBytes(bytes); 
     fs.close(); 

     loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onFileLoaded); 
     loader.loadBytes(bytes); 
    } 

    private function onFileLoaded(event:Event):void { 
     event.target.removeEventListener(Event.COMPLETE, onFileLoaded); 

     var targetFile:File = File.desktopDirectory.resolvePath(saveDir); 
     fs.open(targetFile, FileMode.WRITE); 
     fs.writeBytes(event.target.bytes, 0, event.target.bytes.length); 
     fs.close(); 
    } 

ファイルを書き込む度に、破損したjpgファイルが指定されたディレクトリに表示されます。私は何か見落としてますか?あなたがこれを行うためのよりよい方法を知っているなら、私にも知らせてください!

答えて

0

これは表示されたとおりに行うことができますが、FileクラスcopyToメソッドを使用してファイルをコピーするほうが簡単です。ここにあなたのコンテキストの例である:あなたがはるかに速くそれを作るであろう、最初のメモリへのファイルの内容/バイトをロードする必要はありませんので

コピーを使用して
private function onFileSelected(event:Event):void { 
    var sourceFile:File = event.target as File; 
    var targetFile:File = File.desktopDirectory.resolvePath(saveDir); 

    sourceFile.copyTo(targetFile, true); //true is for overwrite if already exists 
} 

もそれを作ります。

コピーが完了するまで待つ必要がない場合(またはファイルが大きい場合)は、copyToAsyncを使用して、コピー操作が完了してもプログラムがロックされないようにしてください。

+0

これは私が周りにグーグルで行っていたものです。ありがとう。 – user1234567

-1

は、私はそれが固定だ

private function update_treebg(event:MouseEvent):void { 
     saveDir = 'structure/' + id + '/bg.jpg'; 
     file.addEventListener(Event.SELECT, onFileSelected); 
     file.browseForOpen("Select an image", [imgFilter]); 
    } 

    private function onFileSelected(event:Event):void { 
     file.removeEventListener(Event.SELECT, onFileSelected); 
     fs.open(event.target as File, FileMode.READ); 
     fs.readBytes(bytes); 
     var targetFile:File = File.desktopDirectory.resolvePath(saveDir); 
     fs.open(targetFile, FileMode.WRITE); 
     fs.writeBytes(bytes, 0, bytes.length); 
     fs.close(); 
    } 

...時々ばかなことができます。

+0

あなたの答えは何も説明されておらず、将来の訪問者にとっては限定されたものです。ちょうどコードを貼り付けるのではなく、あなたの修正を記述するのにちょっと時間をかけてください。 – BadFeelingAboutThis

関連する問題