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

查阅文档后

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/resource-categories-and-access-V5

在resource/rawfile或resource/resfile目录下添加的文件,应用安装后,利用deveco studio中device broswer查看目录

/data/storage/el2/base/haps/entry/files,其中并没有工程目录rawfile或resfile目录下的文件。这两个目录下的资源文件应该怎么才能在手机的目录下查看?

HarmonyOS
9h前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
shlp

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")
    }
  })
})
}
)
分享
微博
QQ
微信
回复
6h前
相关问题
java怎么读取公共目录下文件
2294浏览 • 1回复 待解决
鸿蒙如何读取resources目录下文件
3512浏览 • 1回复 待解决
如何获取工程目录下json文件
878浏览 • 1回复 待解决
如何监听文件文件目录变化
1747浏览 • 1回复 待解决
canvas怎么绘制资源目录下图片
668浏览 • 1回复 待解决
资源目录下文件到沙箱单向流动
988浏览 • 1回复 待解决
HarmonyOS 如何跨har访问resfile文件
272浏览 • 1回复 待解决