HarmonyOS 如何把hap包中rawfile目录中的文件复制到沙箱目录

如何把hap包中rawfile目录中的文件复制到沙箱目录?在API 9中可以通过resourceManager.getRawFd获取文件描述符,然后通过fileio.copyFile复制到沙箱目录。但是在API11中,使用此方法会把整个hap包都复制过去。

HarmonyOS
2024-12-27 15:25:36
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
shlp

如果要将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.OpenMode.CREATE | fs.OpenMode.READ_WRITE)
  let bufsize = 4096
  let buf = new ArrayBuffer(bufsize)
  let off = 0, len = 0, readedLen = 0
  /**
   * 通过buffer将rawfile文件内容copy到沙箱路径
   */
  while (len = fs.readSync(data.fd, buf, { offset: data.offset + off, length: bufsize })) {
    readedLen += len
    fs.writeSync(dest.fd, buf, { offset: off, length: len })
    off = off + len
    if ((data.length - readedLen) < bufsize) {
      bufsize = data.length - readedLen
    }
  }
  fs.close(dest.fd)
  // 对沙箱路径下的压缩文件进行解压
  zlib.decompressFile(filePath, sanboxPath, {}, (err, data) => {
    if (err != null) {
      console.error(err.message)
    } else {
      console.log("decompress succeed")
    }
  })
  this.context.resourceManager.closeRawFd("tool.zip", (err, data) => {
    if (err != null) {
      console.log(err.message)
    } else {
      console.log("close success")
    }
  })
  // 删除临时文件
  fs.rmdir(tmpPath, (err, data) => {
    if (err != null) {
      console.error(err.message)
    } else {
      console.log("rm tmpPath succeed")
    }
  })
})
})
分享
微博
QQ
微信
回复
2024-12-27 18:19:10
相关问题
HarmonyOS 文件复制到指定目录demo
519浏览 • 1回复 待解决
如何将docker容器文件复制到主机?
2760浏览 • 1回复 待解决
HarmonyOS 如何文件存储公共目录
413浏览 • 1回复 待解决
HarmonyOS 怎么内容复制到剪切板
753浏览 • 1回复 待解决
资源目录文件沙箱单向流动
1439浏览 • 1回复 待解决
rawfilezip复制并解压到沙箱路径
2010浏览 • 1回复 待解决
HarmonyOS rawfile文件拷贝沙箱
528浏览 • 1回复 待解决