HarmonyOS鸿蒙Next中实现复制文件功能示例代码
HarmonyOS鸿蒙Next中实现复制文件功能示例代码
介绍
本示例通过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中。
更多关于HarmonyOS鸿蒙Next中实现复制文件功能示例代码的实战教程也可以访问 https://www.itying.com/category-93-b0.html
2 回复
在HarmonyOS NEXT中实现文件复制可使用ohos.file.fs
API。示例代码如下:
import fs from '@ohos.file.fs';
async function copyFile(srcPath: string, destPath: string) {
try {
await fs.copyFile(srcPath, destPath);
console.log('File copied successfully');
} catch (err) {
console.error(`Copy failed: ${err.message}`);
}
}
// 使用示例
let src = '/data/storage/el1/base/files/src.txt';
let dest = '/data/storage/el1/base/files/dest.txt';
copyFile(src, dest);
该代码通过FS模块的copyFile
方法实现文件复制,需申请ohos.permission.FILE_ACCESS
和ohos.permission.WRITE_USER_STORAGE
权限。
更多关于HarmonyOS鸿蒙Next中实现复制文件功能示例代码的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS Next中实现文件复制功能确实可以通过fileio.copyFileSync
同步方法来完成。您提供的示例代码展示了两种典型的实现方式:
-
对于小文件,使用固定缓冲区一次性读取写入是简洁高效的方案。但需要注意缓冲区大小设置要合理,避免内存浪费。
-
对于大文件,采用分块读取写入的方式更为可靠。您展示的循环缓冲方案是标准做法,通过BUFFER_SIZE控制每次处理的块大小,配合offset参数确保数据完整性。
几点补充说明:
- 资源文件(resfile)和原始文件(rawfile)的处理方式差异确实需要注意。
- 文件操作完成后及时调用
closeSync
释放资源是好习惯。 - 实际开发中建议添加错误处理逻辑。
- 文件路径处理要特别注意沙箱限制。
您提供的Gitee链接中的完整示例很有参考价值,包含了上下文获取、路径处理等完整流程,建议开发者参考。