HarmonyOS resfile或rawfile目录下的文件怎么查看?

阅读 406
1 个回答

1、resfile目录是用于存放应用资源文件的一个特殊目录。具体来说,resfile目录中的资源文件会在应用安装后被解压到应用沙箱路径下。通过Context属性resourceDir可以获取到resfile资源目录的路径。因此,resfile打包后的资源文件路径为应用沙箱路径下的resourceDir。

2、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")
    }
  })
})
}
)
logo
HarmonyOS
子站问答
访问
宣传栏