为什么fopen在Nexus5x android设备上失败(C ++)

时间:2017-10-01 11:52:36

标签: android c++ android-ndk

我正在尝试将bmp保存到我的C ++ android应用程序中(我正在使用chrome项目)。

FILE* fp = fopen("/myimage.bmp", "wb"); // result: fp==NULL, errno==30

FILE* fp = fopen("/Pictures/myimage.bmp", "wb"); // result: fp==NULL, errno==2

手机是Nexus 5x没有SD卡。 android.permission.WRITE_EXTERNAL_STORAGEandroid.permission.WRITE_INTERNAL_STORAGE已设置。

看起来我使用的是无效路径?哪条路有效?它是一个调试输出,所以我需要任何可行的路径。

1 个答案:

答案 0 :(得分:0)

如果您正在访问应用程序的内部存储,则应用程序存储的根路径为

String ROOT_PATH = "/data/data/" + "com.your.package.name" + "/";

因此,如果从内部存储访问您的文件,您必须声明这样的文件路径。

FILE* fp = fopen(ROOT_PATH + "myimage.bmp", "wb"); 

但这并不能确保您的问题能够像@CommonsWare建议的那样解决,

  

“应用程序存储的根路径是” - 路径因人而异   操作系统版本,用户帐户(主要与次要)以及可能的设备   制造商。从来没有硬编码路径。如果NDK代码需要写入   位置,Java代码应该在路径中传递,在那里   派生自方法(例如,getFilesDir())。

所以我在你的问题中再次提到他的评论。

  

如果没有,您无法在任何基于Linux的系统上写入/   超级用户级权限。 “我正在与铬项目合作” -   然后找出Chromium写文件的位置,并编写你的文件   那里。

这些是@CommonsWare建议的一些有价值的见解,可能对您有所帮助。谢谢。