2013-07-12 1 views
0

에서 프로젝트 내 파일에 상대 경로를 가져옵니다 :이 같은 파일에 액세스 할 수 없습니다 JNI를 사용하여 JNI

ifstream file("file.txt"); 

file.txt 네이티브 코드 파일과 같은 폴더가있는 폴더 jni에를

절대 경로 ("/sdcard/file.txt")에만 액세스 할 수 있지만이 트릭은 내가 찾고있는 경로가 아닙니다. 시도했지만 "data/data/com.example.SomeExample/jni/file.txt" 행운이 없습니다.

원시 코드로 작업 할 때 파일을 참조 경로로 참조해야합니까?

+0

'Context.getFilesDir()'은 응용 프로그램 별 파일 디렉토리를 제공합니다. (귀하의 활동은 컨텍스트입니다.) Java에서이를 쿼리하여 네이티브 코드로 전달하거나, Activity를 JNI에 전달하고 직접 쿼리 할 수 ​​있습니다. 원하는 파일 이름으로 경로를 연결하십시오. 앱 프레임 워크가 특정 값을 갖는 것이 보장되지 않기 때문에 경로를 하드 코딩해야합니다. – fadden

+0

@fadden : JNI에서 직접 getFilesDir()을 쿼리하는 예제를 제공하고 답변으로 게시하여 받아 들일 수 있습니까? –

답변

0

jni 폴더는 APK에 추가되지 않습니다. 파일을 응용 프로그램과 번들로 묶으려면 assets 폴더에 넣는 것이 좋습니다. assets 폴더가 아직없는 경우 jni 폴더와 동일한 수준에 배치하십시오 (형제가되도록).

이 방법을 사용하면 자산 관리자를 사용해야합니다. 이것은 android/asset_manager.h에있는 기본 인터페이스를 가지고 있습니다. 파일 사용을 열려면 :

는 다른 플래그가 있습니다
AAsset *a = AAssetManager_open(pAssetManager, "file.txt", AASSET_MODE_BUFFER); 
if (a) 
{ 
    const void *res = AAsset_getBuffer(a); 
    //do something with the file! 
    AAsset_close(a); 
} 

당신은 AASSET_MODE_BUFFER 대신에 전달할 수 있습니다.

관련 문제