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

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

HarmonyOS
2024-12-27 15:25:36
1164浏览
收藏 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")
    }
  })
})
})
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
分享
微博
QQ
微信
回复
2024-12-27 18:19:10


相关问题
HarmonyOS 文件复制到指定目录demo
962浏览 • 1回复 待解决
HarmonyOS 如何文件存储公共目录
900浏览 • 1回复 待解决
如何将docker容器文件复制到主机?
3264浏览 • 1回复 待解决
HarmonyOS 怎么内容复制到剪切板
1081浏览 • 1回复 待解决
资源目录文件沙箱单向流动
1980浏览 • 1回复 待解决
rawfilezip复制并解压到沙箱路径
2679浏览 • 1回复 待解决
HarmonyOS rawfile文件拷贝沙箱
1144浏览 • 1回复 待解决