Android中间件c程序:无法创建目录,只读文件系统

时间:2015-09-09 07:30:41

标签: android c linux native middleware

在我的中间件应用程序中,我需要在执行期间创建多个目录和文件,但由于权限错误而无法执行此操作。

我创建了一个简单的程序来复制场景:

#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>

int main()
{
    struct stat st = {0};

    if (stat("/mnt/demo_folder", &st) == -1) {
        mkdir("/mnt/demo_folder", 0700);
    }
    return 0;
}

当我运行它时,我得到unable to create directory /mnt/demo_folder : Read-only file system

解决此问题的一种方法如下。

手动,我可以在设备上运行mount -o remount ,rw /一次,我的应用程序将来永远不会有权限问题。但由于我无法访问最终用户设备,因此我可以在应用程序本身的开头使用system()执行此命令。但这是正确的方法吗?任何人都可以在这种情况下指出最佳实践。

1 个答案:

答案 0 :(得分:0)

不,这不是正确的做法。

最终用户设备系统文件夹将处于只读状态。通过系统运行mount命令会使设备处于非常脆弱的状态,我不确定android是否允许你运行mount命令。

正确的做法是 -

  • 在您的应用中声明外部存储空间写入权限[WRITE_EXTERNAL_STORAGE]。因此用户将意识到此应用将写入设备存储。
  • 或使用内部存储,但需要从应用程序查询正确的路径并将其发送到本机。请参阅Android文档中的Saving Files
  • 在外部目录中创建一个新文件夹,其名称可以清楚地标识它来自您的应用,因此用户在查看其他应用中的文件和文件夹时将知道该文件夹的用途
  • 您应该将所有文件和文件夹写入您在上一个文件夹中创建的文件夹中。