android - Android 中的 C++ 流。如何使用 std::ofstream 写入设备内存?

标签 android c++ android-ndk filesystems

为了写入 sdcard 上的文件在 AndroidManifest.xml 中添加 android.permission.WRITE_EXTERNAL_STORAGE。需要添加/做什么来保留设备内存(闪存/应用程序文件夹)的记录?

写函数:

bool write_to_file(const std::string & file_name, const std::string & text)
{
     bool res = false;

     std::ofstream stream (file_name.c_str (), std::ios::out);
     stream.clear();
     if (! stream.fail()) {
         res = true;
         stream << text.c_str() << std::endl;
     }
     else {
         LOGE ("std :: ofstream: wtire error");
     }
     stream.close();

     return res;
}

调用示例

std::string file("/sdcard/text.txt");
write_to_file(file, "simple text"); // OK !!!

std::string file("./text.txt");
write_to_file(file, "simple text"); // ERROR !!!

最佳答案

诀窍是将正确的文件名传递给 native 代码。在 Android 中,您使用 Context.getDir() 检索手机内存中的数据文件夹位置。像这样:

File Path = Ctxt.getDir("Data");
File FName = new File(Path, "MyFile.txt");

然后以某种方式将 FName.toString() 传递到 native 库中。粘贴的 fragment 不能直接从 Java 调用 - glue code丢失了。

在我所知道的 Android 版本中,上面的文件路径对应于以下文件系统路径:/data/data/com.mypackage/app_Data/MyFile.txt。但你不能依赖它。

操作系统权限禁止写入设备文件系统的任意路径。你有你的沙盒,去玩吧。这就是智能手机的方式。

关于android - Android 中的 C++ 流。如何使用 std::ofstream 写入设备内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12105675/

相关文章:

电流缺失时的Android默认密度值

Android SharedPreferences 使用 HashMap/For each 循环设置/检索复选框

android - 在 Admob Android 上发布时是否需要删除测试设备?

c++ - 无锁有界堆栈 C++11 原子

android-ndk - 没有 addService() 的 C++ Binder

android - 循环初始声明只允许在 C99 或 C11 模式下使用

安卓。 NDK。打开GLES2。神秘地不工作绘图

android - 为什么在针对 Android 时我的 TextField 在屏幕上这么小?

c++ - C++ 标准是否明确允许/禁止使用不完整类型实例化 std::function?

c++ - 如何在 C++ 中逐字符读取字符串?