【发布时间】:2013-12-12 02:22:56
【问题描述】:
我有一些由 android JNI 用 c++ 编写的代码。
在一个导出函数中
"extern "C" JNIEXPORT int JNICALL Java_com_android_mymapsforge_create(JNIEnv *env, jobject obj)
{
...
ifstream infile("C:\\Users\\li\\Documents\\Visual Studio 2010\\Projects\\importANN\\Debug\\nodes.csv");
string line;
int index = 0;
while( getline( infile, line ))
{
....
}
}
当我使用那些原始的 c++ 代码时,我在 vs2010 下进行测试。要么我为 infile() 参数分配一个固定的文件路径,要么使用一些 c++ get_file_path 函数,这是一个与 windows 系统相关的东西,没有问题。两者都有效。
但现在我想在 Android 使用的 JNI 下使用这些代码。所以文件路径系统更改为android,需要调整一些功能。
我的问题出现了:因为代码最终被我的 android java 代码在一个 android 应用程序下使用,所以“C:\Users\li\Documents\Visual Studio 2010\Projects\importANN\Debug\nodes.csv” ,不再生效,可能改成“/mnt/sdcard/somefolder/nodes.csv”
但是我有经验,当我在 android 应用程序中给出一个固定的文件路径时它告诉我一些错误,所以在 android jave envi 下,我使用下面的代码来获取文件路径,类似的代码在这里:
String mpath ;
mpath = Environment.getExternalStorageDirectory().getPath();
mapView.setMapFile(new File(mpath+"/"+"berlin.map"));
(省略文件名,我只是想告诉我使用的方法)
但是这些android代码一定不能在我的c++包装函数Java_com_android_mymapsforge_create中使用,
所以我的问题是:
c++导出功能下文件(android系统)路径的东西怎么处理?比如我把“nodes.csv”放在我的sdcard根目录下,想在JNI导出的c++函数下做一些处理?
【问题讨论】:
标签: java android c++ android-ndk filesystems