HarmonyOS 鸿蒙Next C++端有没有接口可以直接获取当前应用的临时文件目录?

发布于 1周前 作者 zlyuanteng 来自 鸿蒙OS

HarmonyOS 鸿蒙Next C++端有没有接口可以直接获取当前应用的临时文件目录?

我这边需要创建临时文件用于缓存,直接调用std::tmpfile()会失败,无法创建临时文件。看了下应用沙箱的目录,通过拼接字符串,在cache目录下创建文件成功。但是这个路径包含了包名,所以直接拼接字符串感觉不够灵活,有没有接口可以返回当前应用自己的临时文件路径呢?

2 回复
c++访问沙箱文件/图片等资源
一、获取沙箱路径
方式一:通过arkts侧传递
在应用arkts侧,提供了ApplicationContext对象,可获取沙箱路径:
应用arkts侧
在ApplicationContext对象中获取应用沙箱路径,传递应用沙箱路径到Native C++侧。
let applicationContext = getContext().getApplicationContext(); // 获取应用上下文对象
let filesDir = applicationContext.filesDir; // 应用通用文件路径
let cacheDir = applicationContext.cacheDir; // 应用缓存文件路径
let tempDir = applicationContext.tempDir; // 应用临时文件路径
备注:目前NDK并没有提供获取ApplicationContext的接口,无法直接获取应用沙箱路径。
方式二:拼接
根据应用沙箱目录的[规范](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/file-management/app-sandbox-directory.md),在Native C++侧定义完整的沙箱路径。
如:/data/app/el2/100/base/{包名}/haps/entry/files/test.txt
二、根据沙箱路径打开文件/图片等资源
使用C++标准的文件接口打开文件 path传入对应文件所在的沙箱路径。
fp = fopen(path, "r");
c++访问公共目录的文件图片等资源(图库和文管)
一、获取拥有读/写权限的文件URI,当前需要在arkts侧获取并通过通过NAPI的方式将uri传递给C++侧,如通过picker获取对应uri,再将uri传递到c++侧。
二、使用FileManagement_ErrCode OH_FileUri_GetPathFromUri根据uri获取对应的文件路径。
//将传入的uri转换成路径path。
FileManagement_ErrCode OH_FileUri_GetPathFromUri (const char * uri, unsigned int length, char ** result )
三、使用C++标准的文件接口打开文件。
fp = fopen(path, "r");

HarmonyOS 鸿蒙Next C++端有接口可以直接获取当前应用的临时文件目录

在HarmonyOS鸿蒙Next系统中,你可以通过调用特定的API接口来获取当前应用的临时文件目录。具体来说,你可以使用ApplicationContext或者从Context继承的其他类(如AbilityStageContextUIAbilityContextExtensionContext)来获取这一路径。这些类提供了tempDir属性,该属性返回的就是当前应用的临时文件目录路径。

例如,在C++代码中,你可以通过以下方式获取临时文件目录(伪代码示例):

#include <filemanagement/fileio/oh_fileio.h>
// 假设你已经有了一个UIAbilityContext或者其他继承自Context的类的实例context
char* tempDirPath = nullptr;
FileManagement_ErrCode ret = OH_SomeAPI_GetTempDir(context, &tempDirPath); // 这里的OH_SomeAPI_GetTempDir是示意性的,实际应使用正确的API
if (ret == 0) {
    // 成功获取临时文件目录路径,使用tempDirPath
    // ...
    free(tempDirPath); // 使用完后释放内存
} else {
    // 获取失败,处理错误
}

需要注意的是,实际开发中应查阅HarmonyOS的官方API文档,找到正确的接口名称和使用方式。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部