openharmony native c++文件读写

openharmony 使用c++的文件相关函数可能会出现错误,比如在cpp文件中直接写 fopen("test.txt","w+"),这是常用在C++软件开发过程中使用的,编译执行完成后可在当前目录下找到test.txt文件。但是在openharmony使用c++开发时这样写,系统直接拒绝执行,原因是openharmony系统中存在的"应用沙盒",对文件进行隔离。

当然可以使用fopen、fwrite、fread这类函数的。你需要了解你的应用保存在磁盘的哪个路径,才能写对。此时获取路径就尤为重要了。

在前端代码 ets代码中可以找到。

cpp 复制代码
  // 获取应用文件路径
  let context = getContext(this) as common.UIAbilityContext;
  let filesDir = context.filesDir;
// filesDir = /data/storage/el2/base/haps/entry/files

此时能找到fileDir的具体路径,这个路径是openharmony定义的,和在物理磁盘的位置不同,如上获取到的路径为"/data/storage/el2/base/haps/entry/files"。

在c++代码中使用如下代码,就能将test.txt写入到磁盘中。

cpp 复制代码
   FILE * fp;
   fp = fopen ("/data/storage/el2/base/haps/entry/files/test.txt", "w+");
   fprintf(fp, "%s %s %s %d", "We", "are", "in", 2014);
   fclose(fp);

文件写入成功后,在当前应用中可以访问到,在其他应用就找不到该路径。

沙盒机制,将不同应用进行隔离,实现方案:

应用中读取文件路径为"/data/storage/el2/base/haps/entry/files"磁盘路径为"/data/app/el2/100/base/com.example.myapplication5/haps/entry/files/"

由此可看出,系统对不同的应用进行隔离,将不同的应用内的物理路径和虚拟路径进行转换。

相关推荐
总要学点什么6 小时前
第89篇:三维特效-螺旋圆效果——让螺旋臂卷起一圈圈外扩的涟漪
开发语言·javascript·ecmascript·webgl·cesium·空间分析·1024程序员节
ShineWinsu7 小时前
对于Qt:QRadioButton常见属性以及QButtonGroup的解析
数据库·c++·qt·microsoft·gui·qradiobutton·qbuttongroup
傲世仙尊8 小时前
多态-虚表才活到运行期符号表早已消失
c++
开开心心_Every8 小时前
快速隐藏程序工具自定义快捷键一键切换
java·开发语言·前端·spring·智能手机·word·intellij-idea
chenbingjie_c8 小时前
C++ 多态完全指南:从虚函数重写到虚函数表原理
开发语言·c++
是main不是漫8 小时前
【双指针——移动零】数组划分类题目的入门基石
c++·算法
吴卫斌8 小时前
定投ETF实战指南(四):行业/主题ETF——定投的“进攻端“
开发语言·python·股票·量化
·present·8 小时前
CSAPP(Bomb lab)
c语言·c++
王老师青少年编程8 小时前
2026年信奥赛c++普及组csp-j第二轮复赛真题
c++·真题·csp·信奥赛
超级架构师9 小时前
PRAXO-CORE 2.5.0:用 conformance 和显式边界构建 Go Agent 框架
开发语言·人工智能·后端·golang·ai编程·智能体框架·praxo-core