为什么Fopen在Nexus5X Android设备(C )上失败

Why fopen fails on Nexus5x android device ( C++ )

本文关键字:失败 设备 Fopen Nexus5X Android 为什么      更新时间:2023-10-16

我试图将BMP保存到我的C Android应用程序中(我正在与Chromium Project一起工作)。

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,没有SDCARD。设置了android.permission.WRITE_EXTERNAL_STORAGEandroid.permission.WRITE_INTERNAL_STORAGE

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

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

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

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

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

但这不能确保您的问题被@Commonsware所建议的解决,

"应用程序存储的根路径是" - 该路径因 OS版本,用户帐户(主要与次要)以及可能的设备 制造商。永远不要硬码路径。如果NDK代码需要写入 位置,Java代码应在路径中通过 源自方法(例如getfilesdir())。

所以我在您的问题中再次提及他的评论。

您无法在没有任何基于Linux的系统上写入/ 超级用户级特权。"我正在与铬项目合作" - 然后找出铬写在哪里,然后写文件 那里。

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