gpt4 book ai didi

java - 为什么 fopen 由于 Android-NDK 应用程序的权限问题而在 native 方法中失败?

转载 作者:行者123 更新时间:2023-11-28 08:05:51 31 4
gpt4 key购买 nike

看到我在一个 native 调用中有以下代码

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) remount您的库在其中创建文件的文件系统,然后对正在创建文件的特定目录执行 chmod 777。现在执行应用程序。它应该工作。但这不是通用的。如果您出于某种测试目的而这样做,那么此解决方案最简单且节省时间...

如果卡在某个地方,请告诉我..

关于java - 为什么 fopen 由于 Android-NDK 应用程序的权限问题而在 native 方法中失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10311409/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com