实现复制文件功能鸿蒙示例代码
·
本文原创发布在华为开发者社区,更多鸿蒙场景化示例请见华为开发者联盟官网“行业实践与常见问题”专题页。
介绍
本示例通过fileio.copyFileSync,以同步方法实现复制文件的功能。
效果预览

实现思路
-
resource路径中,resfile中的文件在APP安装后自动解压到沙箱只读目录,通过context.resourceDir获取该只读路径。
-
resource路径中,rawfile中的文件通过context.resourceManager.getRawFileContent(Sync)获取。
-
filePicker得到外部文件临时URI,只读访问,通过管道复制到沙箱内新文件。
// 1. 若缓冲区永远大于文件最大大小,可一次搞定, 不建议设置超大缓冲区,文件过大请用下面第二个方法
let buf = new ArrayBuffer(4096);
let readLen = fs.readSync(fromFile.fd, buf);
let writeLen = fs.writeSync(toFile.fd, buf);
fs.closeSync(fromFile);
fs.closeSync(toFile);
// 2. 若文件大小不明确,缓冲执行
const BUFFER_SIZE = 4096
let buf = new ArrayBuffer(BUFFER_SIZE);
let totalSize = fs.statSync(fromFile.fd).size;
let writtenSize = 0;
while (writtenSize < totalSize) {
let readLen = fs.readSync(fromFile.fd, buf, {
offset: writtenSize, length: BUFFER_SIZE
});
let writeLen = fs.writeSync(toFile.fd, buf, {
offset: writtenSize, length: readLen
});
writtenSize += writeLen;
}
fs.closeSync(fromFile);
fs.closeSync(toFile);
- resfile中的文件为只读访问且有确切目录,外部文件的临时URI是只读访问,因此这两个通过不同方式最终拿到文件都是采用fs.copyFileSync的方法。 rawFile中的文件则通过资源管理器API来获取其内容,可以看到其在大文件中不适合使用,大文件建议放在resfile中。
更多推荐
所有评论(0)