【关键字】
HAP / rawfile / 沙箱 / 文件复制
【问题描述】
一些打包时内置文件在运行时需要放到沙箱目录。如何把HAP包中rawfile目录中的文件复制到沙箱目录?在API 9中可以通过resourceManager.getRawFd获取文件描述符,然后通过fileio.copyFile复制到沙箱目录。但是在API11中,使用此方法会把整个HAP包都复制过去。
【解决方案】
如果要将rawfile解压到沙箱路径下,可以先将rawfile的内容copy到沙箱,再进行解压。
Demo代码如下:
/**
* 通过fd来进行拷贝,避免文件过大的内存占用问题
* data.fd是hap包的fd,data.offset表示目标文件在hap包中的偏移,data.length表示目标文件的长度
*/
this.context.resourceManager.getRawFd("tool.zip", (err, data) => {
if (err != null) {
console.error(err.message)
return
}
let sanboxPath = this.context.filesDir
console.log("沙箱路径:" + sanboxPath)
let tmpPath = fs.mkdtempSync(sanboxPath + "/XXXXXX")
let filePath = this.context.tempDir + "/tmp.zip"
console.log("压缩文件路径:" + filePath)
let dest = fs.openSync(filePath, fs.OpenMod