Android NDK internalDataPath - 写入文件

时间:2016-08-01 13:11:25

标签: android android-ndk

我在 NativeActivity 中使用 internalDataPath ,在运行时访问时看起来像这样:

"/data/data/app.name/files"

然后我尝试写这样的文件:

- fopen("/data/data/app.name/files/test.txt", "wb");
- fwrite(buffer, size, count, m_handle);
- fclose(m_handle);

在这种情况下,fopen将失败并且不会打开文件,这实际上意味着其他功能不会被调用,我通过查看文件系统进行了实验,而是尝试了以下路径。

"/Android/data/app.name/files/test.txt"

这样可行,它会创建文件并允许其他函数写入和关闭文件。

我的问题是,为什么 internalDataPath / data / 而不是 / Android / 开头?我在申请设置中做错了吗?我应该调用不同的功能吗?

还值得一提的是

externalDataPath = "/storage/emulated/0/Android/data/app.name/files"

这意味着对于此设备(没有外部SD),它指向正确的INTERNAL文件路径。

如果有任何不清楚或您需要更多信息,请告诉我。

由于

1 个答案:

答案 0 :(得分:0)

我添加了mkdir()以确保创建了整个internalDataPath树,并且它似乎在我的Nexus 7上运行,我可以看到使用ES文件资源管理器创建的文件。

它也适用于我的Galaxy S6,但我实际上无法在ES文件资源管理器中看到这些文件,但它可以正常工作,因为文件在下次重启时被加载和读取所以我只能假设我看不到该文件,因为该设备没有root。

值得注意的是,在Android版本之间,internalData路径已更改位置,例如:

Nexus 7(5.1.1): internalDataPath = /data/data/app.name/files

Galaxy S6(6.0.1): internalDataPath = /data/user/0/app.name/files

这些路径是绝对的,或至少相对于ES文件资源管理器中最高可查看的根目录。

不确定这是否会对任何人有所帮助,问题的主要部分可能是我自己对Android文件系统缺乏了解,因为似乎有很多类似结构的目录,很容易迷失错误。

感谢Patrik和Dave花时间和我一起调查。