Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android中JNI在C代码中打开文件时获取NULL_Android_C++_C_Android Ndk_Java Native Interface - Fatal编程技术网

android中JNI在C代码中打开文件时获取NULL

android中JNI在C代码中打开文件时获取NULL,android,c++,c,android-ndk,java-native-interface,Android,C++,C,Android Ndk,Java Native Interface,我在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/

我在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.txt\n");
        os.flush();

        os.writeBytes("exit\n");
        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\u EXTERNAL\u STORAGE
,但尝试打开以进行写入

FILE* fp = fopen("/storage/sdcard0/input.txt","w+");
您可以通过检查
errno
来获取错误,并使用获取消息


您必须打开该文件以仅读取
“r”
或添加写入权限

您是否尝试分解您的语句以查看哪一行引起了问题?您是否查看了权限?是什么让你认为你的应用程序拥有从外部存储根目录读/写的权限?@Al-mo没有必要这么做,因为我知道发生了什么。fopen()返回null。我想知道为什么?@Erik我没有调查权限。但是,当您添加需要权限的代码时,程序会停止运行,而不会得到null。我说的对吗?不是真的。。。这取决于文件所在的位置。如果它位于公共区域或您的某个应用程序文件夹中,则应该没有问题。我建议您在此处阅读有关外部存储的内容:
FILE* fp = fopen("/storage/sdcard0/input.txt","w+");