2012-04-18 2 views
1

내 프로젝트의 "assets"폴더에 임베드 한 일부 이미지를 File.applicationStorageDirectory 위치로 복사해야하지만 실제로 어떻게해야하는지에 대해서는 알지 못합니다. File 객체 인스턴스를 사용하여 포함 된 파일에 액세스하는 방법을 모르겠습니다.) ..."assets"의 임베디드 파일을 File.applicationStorageDirectory로 복사

어떤 제안이 있습니까?

+0

포함 된 파일은 ByteArray로 직렬화되므로 [FileStream.writeBytes()] (http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash)를 사용할 수 있어야한다고 가정합니다. /filesystem/FileStream.html#writeBytes())를 사용하여 파일에 기록합니다. – RIAstar

+0

감사합니다. 그런 목적을 위해 포함 된 파일을 참조하는 File 객체를 만들어야합니다. 어떻게해야합니까? 'new File ("???")' – jroy

+0

새로운 빈 파일을 만들고 FileStream을 사용하여 그 파일에 쓰면됩니다. "AIR 쓰기 파일"검색을 통해 관련 주제에 대한 결과를 얻을 수 있습니다. – RIAstar

답변

0

기본적으로 주석에 제안 된대로 내장 자산은 기본적으로 ByteArray에 직렬화되지 않습니다. 예를 들어, 이미지는 BitmapAsset 클래스로 직렬화됩니다.

[Embed(source="sourceImg.png")] 
private var MyImage:Class; 

이 삽입을 위해 당신이 할 수 있습니다 :

var bmp:BitmapAsset = new MyImage(); 

ByteArray의에 의해 BitmapAsset 것을 변환하는 방법이 있습니다,하지만 더 쉬운 방법도 있습니다 : 당신은 '옥텟 스트림'에 유형을 설정 한 경우에 embed 지시문을 사용하면 ByteArray의 하위 클래스 인 ByteArrayAsset 클래스에 즉시 직렬화됩니다. 그래서 당신은 할 수 있습니다 :

[Embed(source="sourceImg.png", mimeType="application/octet-stream")] 
private var MyImage:Class; 

var bytes:ByteArray = new MyImage(); 

지금 당신이해야 할 모든하여 FileStream을 사용하여 디스크에 해당 된 ByteArray를 작성할 수 있습니다 :

var file:File = File.desktopDirectory.resolvePath('targetImage.png'); 
var fs:FileStream = new FileStream(); 
fs.open(file, FileMode.WRITE); 
fs.writeBytes(bytes); 
fs.close(); 

을 그리고 그게 전부입니다.

+0

완벽! 그게 바로 제가 찾고 있었던 것입니다. 고마워요! – jroy

관련 문제