在android中通过JNI在C代码中打开文件时获得NULL
Getting NULL when open file in C code by JNI in android
我在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
的权限
相关文章:
- .cpp和.h文件中的模板专用化声明
- 为什么TinyXML2的XMLDocument::FirstChild()函数在尝试解析这个有效的XML文件时返回NULL?
- GDALOpen 在 GEOTiff 文件上返回 null
- 以 Null 结尾的字符串的"NULL"或" "符号是否存储在文件中?
- FindResource 调用返回 RCDATA 类型的文本文件的 NULL
- GNU 链接器:如果头文件中的指针被声明为 NULL 和/或 extern,则出错
- C :将文本文件的内容存储在2D数组中,作为字符串(用于NULL终结器的麻烦?)
- 在读取 Visual C++ 中的二进制文件(而不是其他编译器)后,每隔一个字符都是 NULL
- C++:在文本文件中存储char数组时,是否存储Null
- 当第 4 个(可选)参数为 NULL 时,写入文件将引发访问冲突
- 如何在二进制模式下将 NULL 写入文件
- 在 Matlab .mat 文件中读取:变量的秩和变暗正确,但数据为 NULL
- C++将文本文件写入字符串并转换为double,会得到null char或0
- 当文件存在时,Linux中的fopen(Lubuntu)会返回NULL
- 派生类的头文件中声明的字符串在超级类中为null
- c++中的.get()在读取文件时是否返回null ?
- 如何在头文件中实现的构造函数中将指向模板类的链表指针初始化为NULL
- 为什么保存到文件和加载的时间(NULL)和仅仅时间(NULL)是不一样的
- 在android中通过JNI在C代码中打开文件时获得NULL
- 如何在c++和linux中将std::ostream重定向到文件或/dev/null