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

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

HarmonyOS
2024-05-28 20:05:42
浏览
收藏 0
回答 1
待解决
回答 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); 
}
分享
微博
QQ
微信
回复
2024-05-29 20:21:45
相关问题
无法读取到hsp模块rawfile文件
1961浏览 • 1回复 待解决
Preview是否支持读取rawfile文件
2464浏览 • 1回复 待解决
pthread创建线程如何读取rawfile
1982浏览 • 1回复 待解决
hsp模块里rawfile文件读取问题
295浏览 • 1回复 待解决
读取数据文件方法有哪些
375浏览 • 1回复 待解决
HarmonyOS如何解压rawfilezip文件
394浏览 • 1回复 待解决