【问题标题】:Writing to internal storage in c++ from jni从 jni 写入 c++ 中的内部存储
【发布时间】:2013-08-15 04:47:38
【问题描述】:

我正在尝试通过以下步骤在我的应用程序的内部存储目录中写入一个文件:

1) 在活动类中初始化我的“jni 库”:

MyLib mylib = new MyLib();

2)通过在我的Activity类中调用getFilesDir给出内部存储路径:

mylib.setSavePath(getFilesDir());

3) 从我的库中调用 mylib.save() 方法,该方法在 c++ 中执行以下操作: 打开我要写入的文件:

fp = fopen(pathtotheinternalstorage+filename,"w");
if (!fp) {
    SetError(XML_ERROR_FILE_NOT_FOUND, filename, 0);
    return _errorID;
}

文件路径正确:/data/data/com.myapp/files/myfile.xml 但是 fopen 失败了,我不知道我做错了什么。 如果我用一些 java 代码(openFileOutput)编写,它运行良好。

感谢您的帮助。

【问题讨论】:

  • 粘贴代码。确切的错误信息
  • 您是否检查了内部存储路径和文件名之间是否有 /?
  • 是的,路径是正确的:/data/data/com.myapp/files/myfile.xml

标签: android android-ndk


【解决方案1】:

我找到了答案,我正在使用重新定义 fopen 的库来读取资产文件夹中的内容。

#define fopen(name, mode) android_fopen(name, mode)

现在可以正常使用了

【讨论】:

    【解决方案2】:

    更多信息会有所帮助。根据路径,我假设您在 Linux 机器上。我会首先检查路径的权限。以下几点建议

    1) 尝试在您的主目录中打开一个文件,看看您是否有同样的问题。

    2) 尝试使用chmod 777 设置文件世界可写,看看是否能解决问题。请记住,设置世界可写确实是不安全的,一旦发现问题,您应该将其更改为更具限制性的设置。

    【讨论】:

    • 谢谢,但我目前正在android上开发,所以我无法随意设置权限
    猜你喜欢
    • 1970-01-01
    • 2013-11-28
    • 2011-06-12
    • 2011-12-05
    • 1970-01-01
    • 2016-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多