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

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

HarmonyOS
2024-05-28 20:05:42
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
PatrickGamp

核心代码:

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文件
612浏览 • 1回复 待解决
Preview是否支持读取rawfile文件
810浏览 • 1回复 待解决
pthread创建线程如何读取rawfile
635浏览 • 1回复 待解决
ets文件怎么调用ts文件定义方法
1397浏览 • 1回复 待解决
如何渲染gif类型文件
5486浏览 • 1回复 待解决
怎么读取sdcard下txt文件
7885浏览 • 2回复 待解决
如何读取相册图片
160浏览 • 1回复 待解决
java怎么读取公共目录下文件
1051浏览 • 1回复 待解决
js api 如何读取预置json文件
5660浏览 • 1回复 待解决
求大佬告知如何读取文件大小
456浏览 • 1回复 待解决
鸿蒙如何读取resources目录下文件
1755浏览 • 1回复 待解决
native层如何访问rawfile二进制文件
702浏览 • 1回复 待解决
读取文件方式,有人知道吗?
435浏览 • 1回复 待解决