读取Rawfile中的文件,并转存/渲染的方法?

原始场景:

图片、资源文件等放在项目的rawfile目录时,需要在运行中转存,或者使用这些文件。

阅读 797
1 个回答

核心代码:

1、获取Rawfile文件的Fd

getContext(this).resourceManager.getRawFd(this.rawfilePath).then(file => {
  // 此处的file是混合的大文件,需要从中读取需要的内容
  this.saveFileToCache(file)
}).catch((err) => {
  console.log(JSON.stringify(err));
})

2、通过Rawfile文件的Fd,将文件拷贝至应用缓存中:

// 将文件保存至沙箱目录
saveFileToCache(file) {
  // 创建缓存文件(当前是覆盖式创建)
  let cacheFile = fs.openSync(
    `${getContext(this).cacheDir}/${this.rawfilePath.split('/')[1]}`,
    fs.OpenMode.WRITE_ONLY | fs.OpenMode.CREATE | fs.OpenMode.TRUNC)
  let buffer = new ArrayBuffer(4096);
  let currentOffset = file.offset;
  let lengthNeedToReed = file.length;
  let readOption = {
    offset: currentOffset,
    length: lengthNeedToReed > buffer.byteLength ? 4096 : lengthNeedToReed
  }
  while(true) {
    // 读取buffer容量的内容
    let readLength = fs.readSync(file.fd, buffer, readOption);
    // 写入buffer容量的内容
    fs.writeSync(cacheFile.fd, buffer, {length:readLength})
    // 判断后续内容 修改读文件的参数
    if (readLength < 4096) {
      break;
    }
    lengthNeedToReed -= readLength;
    readOption.offset += readLength;
    readOption.length = lengthNeedToReed > buffer.byteLength ? 4096 : lengthNeedToReed;
  }
  fs.close(cacheFile);
  // 展示cache目录下的文件名
  this.cacheDirFileList = fs.listFileSync(getContext(this).cacheDir);
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进