核心代码:1、获取Rawfile文件的FdgetContext(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); }
核心代码:
1、获取Rawfile文件的Fd
2、通过Rawfile文件的Fd,将文件拷贝至应用缓存中: