读取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
相关问题
HarmonyOS Rawfilejson文件读取
195浏览 • 1回复 待解决
无法读取到hsp模块rawfile文件
2132浏览 • 1回复 待解决
HarmonyOS 读取本地RawFile文件失败
207浏览 • 1回复 待解决
Preview是否支持读取rawfile文件
2677浏览 • 1回复 待解决
pthread创建线程如何读取rawfile
2129浏览 • 1回复 待解决
hsp模块里rawfile文件读取问题
430浏览 • 1回复 待解决
读取数据文件方法有哪些
548浏览 • 1回复 待解决
HarmonyOS rawfile文件如何获取URI
156浏览 • 1回复 待解决
HarmonyOS如何解压rawfilezip文件
491浏览 • 1回复 待解决