在android中通过JNI在C代码中打开文件时获得NULL

Getting NULL when open file in C code by JNI in android

本文关键字:文件 NULL 代码 android JNI      更新时间:2023-10-16

我在android应用程序中通过JNI调用C代码。

调用时一切正常,但是当我输入以下代码:

FILE* fp = fopen("/storage/sdcard0/input.txt","w+");
if(fp==NULL)
    return(*env)->NewStringUTF(env,"n");
else
    return(*env)->NewStringUTF(env,"y");

得到"n"我确信路径是正确的,我在我的移动终端上尝试了这个命令:

cat /storage/sdcard0/input.txt

,它得到了文件的内容。

编辑:

我试图通过以下代码更改文件的权限,但它给了我相同的响应:

void changePerm()
{
    Process chperm;
    try {
        chperm=Runtime.getRuntime().exec("su");

   DataOutputStream os = 
          new DataOutputStream(chperm.getOutputStream());
        os.writeBytes("chmod 777 /storage/sdcard0/input.txtn");
        os.flush();
        os.writeBytes("exitn");
        os.flush();
          chperm.waitFor();
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
}

我还添加了这个权限,没有任何改变:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

我认为该文件的权限实际上是0777

您添加了android.permission.READ_EXTERNAL_STORAGE,但您试图打开写入

FILE* fp = fopen("/storage/sdcard0/input.txt","w+");

您可以通过检查errno获得错误,并通过strerror获得消息。

您必须打开文件,读取"r"或添加写入WRITE_EXTERNAL_STORAGE的权限