2012-03-01 4 views
6

내 원시 코드에서 간단한 텍스트 파일을 읽으려고합니다. (기본 오디오 예에서와 같이) 다음 assetManager = getAssets(); 내 네이티브 메소드에 assetManager을 전달하고있어 :Android 자산 및 NDK

  1. 은 내가 자산 관리자를 만드는거야 내 활동에서 자산 폴더
  2. 에서 file.txt를 배치 :

    AAssetManager* mgr = AAssetManager_fromJava(env, assetManager); 
    AAsset* asset = AAssetManager_open(mgr, "file.txt", AASSET_MODE_UNKNOWN); 
    AAssetManager* mgr = AAssetManager_fromJava(env, assetManager); 
    
    off_t start, length; 
    
    int fd = AAsset_openFileDescriptor(asset, &start, &length); 
    

문제는 fd가 0보다 작은 것입니다!

아무도 도와 드릴 수 있습니까?

답변

5

AAsset_openFileDescriptor은 압축되지 않은 파일 (예 : mp3, jpg, png 등)에서만 작동합니다. 그것은 문서 (asset_manager.h 헤더 파일)로 작성 : AAsset_read 또는 AAsset_getBuffer 중 하나

/** 
* Open a new file descriptor that can be used to read the asset data. 
* 
* Returns < 0 if direct fd access is not possible (for example, if the asset is 
* compressed). 
*/ 
int AAsset_openFileDescriptor(AAsset* asset, off_t* outStart, off_t* outLength); 

사용.

+1

감사합니다. 그래서 그것은 기본적으로 텍스트 파일을 압축 했습니까? – nmnir

+0

죄송합니다 recomennting하지만 난 정말 파일을 Compres unAsres_read 또는 AAsset_getBuffer 사용하는 방법은 filedescriptor 정말 필요합니까? – nmnir

+0

apk 파일은 zip 파일입니다. 따라서 포함 된 대부분의 파일 (assets 서브 디렉토리의 파일 포함)은 압축됩니다. mp3, jpeg, png 등의 특정 파일 만 압축되지 않습니다. –