为什么 fopen 由于来自 Android-NDK 应用程序的权限问题而在本机方法中失败
Why fopen gets fail in native method due to permission issue from Android-NDK application?
看到我在一个本机调用中有以下代码
errno = 0;
FILE *fp;
fp = fopen("jigar.txt","wb");
if(fp == NULL)
__android_log_print(ANDROID_LOG_ERROR, APPNAME, "FOPEN FAIL with %d",errno);
else
__android_log_print(ANDROID_LOG_ERROR, APPNAME, "FOPEN pass ");
失败并显示
FOPEN FAIL with 30
现在这里 30 表示它显示错误
#define EROFS 30 /* Read-only file system */
在我的应用程序的 MainFest 文件中,我添加了这一行
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" >
我仍然收到此错误..
如何解决此问题?
编辑
感谢指定文件夹名称,它可以工作但是
就我而言,我有一个库,它有这样的 fopen() 调用,其中文件名我无法给出。它采用默认文件名。
我正在我的 ndk 应用程序中使用此库,那么在这种情况下如何解决这个问题?
默认情况下,当您运行应用程序时,它会在自己的上下文中运行。 fopen("jigar.txt","wb"); 将尝试打开当前目录中的文件,我认为主要是/data/.。所以你不能创建这样的文件。相反,如果你想要一个文件夹在/data/中,你可以调用一个函数 gteDir(),你可以在其中创建自己的文件。好的,这都是一般信息。
谈到您的问题,如上所述,您需要提供绝对路径以在不同的目录中创建文件。即使在 Linux 中也是如此。
对于库的事情,你可以做两件事。
1) 对库源代码进行更改,并使用 NDK 再次编译。在进行更改时,请给出一些字符串作为 fopen() 的参数,您将在执行应用程序时传递它。
2) 重新挂载库在其中创建文件的文件系统,然后将 chmod 777 执行到在其中创建文件的特定目录。现在执行应用程序。它应该有效。但这不是通用的。如果您出于某些测试目的而这样做,那么此解决方案最简单且节省时间......
如果卡在某个地方,请告诉我..
您应该指定写入"jigar.txt"文件的文件夹。喜欢这个:
fp = fopen("/sdcard/figar.txt", "wb");
雅皮士终于明白了
我这样做过
首先将进程的当前目录从 "/"
更改为 "/sdcard/"
chdir("/sdcard/");
然后它找到相对于/SDcard/的路径
一切正常..!!
- 从C++本机插件更新Vector3数组
- GCC本机矩阵运算库
- VC++本机单元测试,找不到调试符号
- 在这种情况下,java对象是否可以调用本机函数
- PC中的程序和PHONE中的本机描述应用程序之间的数据连接
- 为什么导入Mixed native/CLR lib.dll的本机C++应用程序没有在Mixed lib.dll中的外部变
- 无法将标准库导入本机 android 项目中的头文件
- 使用本机 C++ 应用程序中的 C# 代码
- 在nodejs中使用本机代码的最佳方法是什么?
- 如何告诉本机节点模块所需的dll存储在哪里?
- 我在 Mac 的 Electron 中的本机C++插件有问题
- 使用JNI从Java调用本机(C++)函数时发生访问冲突:这是我的代码问题,还是已知问题
- 通过JNI执行OpenCV本机函数的问题
- 从多线程.net应用程序调用的本机dll中的tbb存在问题
- 将BSTR从本机c++传递到托管c#dll时出现问题
- 视力的NET C#调用C++本机Win32 DLL时出现问题
- GraphicsMagick使用c++java本机代码的性能问题
- 为什么 fopen 由于来自 Android-NDK 应用程序的权限问题而在本机方法中失败
- Java本机接口(JNI)是否受到c++ ABI兼容性问题的影响
- 本机C++dll/C#内存问题