【问题标题】:Android NDK internalDataPath - Writing to fileAndroid NDK internalDataPath - 写入文件
【发布时间】:2016-08-01 13:11:25
【问题描述】:

我在我的 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),它指向正确的内部文件路径。

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

谢谢

【问题讨论】:

  • 这是什么设备和版本?我没有“Android”位置,只有根中的“数据”,这就是internalDataPath 返回的内容,所以fopen 在类似的示例中对我来说很好。
  • 设备:Nexus 7 Tablet (2012) 版本:Android 5.1.1 (LMY47V) 这是我的开发设备,所以它看到了相当多的闪烁和 root 等,所以它可能只是进入了一些损坏状态...我在 Android 6 上的 Galaxy S6 似乎在“/storage/emulated/0”路径中有“Android”文件夹和“data”文件夹。
  • 我已经在 Nexus 7 2013 和 Android 6.0.1 上对其进行了测试。我不确定是什么导致internalDataPath 变量指向无效路径。您是否尝试过恢复出厂设置?
  • 我可能会尝试,这很奇怪,我想知道我是否应该设置一些东西,以便操作系统在安装/启动应用程序时为我创建这些文件夹?我猜我不应该手动创建它们吗?
  • 也许我应该手动创建整个东西?我猜是有道理的。

标签: android android-ndk


【解决方案1】:

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

它也适用于我的 Galaxy S6,但我实际上无法在 ES 文件资源管理器中看到文件,但它可以工作,因为文件已加载并在下次重新启动时读取,所以我只能假设我看不到文件,因为此设备未 root。

值得注意的是,在Android版本之间,internalData path的位置发生了变化,例如:

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

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

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

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

感谢 Patrik 和 Dave 花时间和我一起研究。

【讨论】:

  • 很高兴这对你有用。我仍然很想知道通常负责创建这些目录的机制是什么,因为这似乎在我的 4.2.2 和 6.01 测试用例的第一次执行时自动发生
猜你喜欢
  • 2013-01-20
  • 1970-01-01
  • 2012-10-12
  • 2016-05-20
  • 1970-01-01
  • 2012-05-27
  • 1970-01-01
  • 1970-01-01
  • 2011-06-11
相关资源
最近更新 更多