在Android中使用C++从原生代码创建临时文件

hjzp0vay  于 2023-09-28  发布在  Android
关注(0)|答案(1)|浏览(160)

我正在做一个Android项目,在C++中有原生库。在代码的某个地方,我遇到了这行代码,它试图创建一个新文件:

namespace fs = boost::filesystem;
dest_path = fs::absolute(make_public(fs::temp_directory_path())) / fs::path("tmp-" + to_string(u) + "." + extension);
fs::remove(dest_path);
fs::copy_file(*doc.get_path(), dest_path);

现在boost API temp_directory_path返回Android中/data/local/tmp的路径。但似乎,Android应用程序不允许在此位置创建文件。是否有一种方法可以通过adb shell授予权限在此位置创建文件/文件夹?或者是否有/data/local/tmp目录的替代方案,因为我只需要一个临时位置,不打算长期存储这些文件,或者我如何在ndk或通过boost中获取应用程序的数据目录?

sxpgvts3

sxpgvts31#

我的建议是在库或类的初始化期间从Java/Kotlin代码中获取目录,将fs::temp_directory_path()替换为从Java/Kotlin代码中获取的值。
为此,我可能会使用应用程序缓存目录,通过使用Context.getCacheDir()。这将得到一个File,您应该通过调用file.getAbsolutePath()获得绝对路径(因为本机代码不使用URI,而是使用常规文件系统路径)。

相关问题