2012-03-01 3 views
6

Я пытаюсь прочитать простой текстовый файл из моего собственного кода.Android Активы и NDK

  1. Я поместил file.txt в папке активов
  2. В моей деятельности я создаю менеджер активов: assetManager = getAssets(); Тогда я проходящий в assetManager на мой собственный метод и (как в родном аудио примера) :

    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):

/** 
* 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); 

Используйте либо AAsset_read или AAsset_getBuffer.

+1

Спасибо. Так что сжатый текстовый файл по умолчанию? – nmnir

+0

Извините за recomennting, но я действительно нуждаюсь в filedescriptor, так каким образом используется AAsset_read или AAsset_getBuffer для un compres файла? – nmnir

+0

Файл apk - это zip-файл. Поэтому большинство файлов, которые он содержит (в том числе в подкаталоге ресурсов), сжимаются. Только определенные файлы, такие как mp3, jpeg, png и несколько других, не сжимаются. –