2013-07-12 208 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查詢並將其傳遞到您的本機代碼,或將您的活動傳遞給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