HarmonyOS 鸿蒙Next实现拷贝文件到沙箱功能示例代码
HarmonyOS 鸿蒙Next实现拷贝文件到沙箱功能示例代码
介绍
本示例基于openSync、writeSync接口实现了拷贝文件到沙箱。 实现拷贝文件到沙箱功能源码链接
效果预览
使用说明
点击按钮拷贝,拷贝之后即可保存图片文件。
实现思路
- 使用openSync、writeSync接口实现了拷贝文件到沙箱
context.resourceManager.getRawFileContent('startIcon.png', (err: BusinessError, data: Uint8Array) => {
if (err != null) {
Logger.error('open file failed: ' + err.message)
} else {
let buffer = data.buffer
let sandboxPath = context.filesDir
Logger.info('myRawfileCopy path' + sandboxPath)
let file = fs.openSync(context.filesDir + '/test.png', fs.OpenMode.CREATE | fs.OpenMode.READ_WRITE)
try {
// 拷贝文件到沙箱
fs.writeSync(file.fd, buffer)
fs.close(file.fd)
} catch (err) {
Logger.info('myRawfileCopy error')
}
}
})
- 保存到媒体库
// 获取需要保存到媒体库的位于应用沙箱的图片/视频uri
let srcFileUris: Array<string> = [
fileUri.getUriFromPath(context.filesDir+ '/test.png')
];
let photoCreationConfigs: Array<photoAccessHelper.PhotoCreationConfig> = [
{
title: 'test2', // 可选
fileNameExtension: 'png',
photoType: photoAccessHelper.PhotoType.IMAGE,
subtype: photoAccessHelper.PhotoSubtype.DEFAULT, // 可选
}
];
let desFileUris: Array<string> = await phAccessHelper.showAssetsCreationDialog(srcFileUris, photoCreationConfigs);
let file1 = fs.openSync(context.filesDir+ '/test.png', fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
let arrayBuffer = new ArrayBuffer(4096000);
let readLen = fs.readSync(file1.fd, arrayBuffer);
let buf = buffer.from(arrayBuffer, 0, readLen);
Logger.info('content of File: ' + buf.toString());
let file2 = fs.openSync(desFileUris[0], fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
fs.closeSync(file2);
fs.closeSync(file1);
Logger.info('showAssetsCreationDialog success, data is ' + desFileUris);
更多关于HarmonyOS 鸿蒙Next实现拷贝文件到沙箱功能示例代码的实战教程也可以访问 https://www.itying.com/category-93-b0.html
1 回复
更多关于HarmonyOS 鸿蒙Next实现拷贝文件到沙箱功能示例代码的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS(鸿蒙Next)中,拷贝文件到沙箱的功能可以通过使用ohos.file
和ohos.file.fs
模块来实现。以下是一个示例代码,展示了如何将文件从设备存储拷贝到应用的沙箱目录中。
import fs from '@ohos.file.fs';
import fileIO from '@ohos.fileio';
// 定义源文件路径和目标沙箱路径
const srcFilePath = '/data/storage/el2/base/files/source.txt';
const destFilePath = '/data/storage/el2/base/cache/destination.txt';
// 检查源文件是否存在
if (fs.accessSync(srcFilePath)) {
// 创建目标文件的父目录(如果不存在)
const destDir = destFilePath.substring(0, destFilePath.lastIndexOf('/'));
if (!fs.accessSync(destDir)) {
fs.mkdirSync(destDir);
}
// 打开源文件和目标文件
const srcFile = fs.openSync(srcFilePath, fs.OpenMode.READ_ONLY);
const destFile = fs.openSync(destFilePath, fs.OpenMode.CREATE | fs.OpenMode.READ_WRITE);
// 读取源文件内容并写入目标文件
const buffer = new ArrayBuffer(1024);
let bytesRead = 0;
while ((bytesRead = fs.readSync(srcFile, buffer, { offset: 0, length: buffer.byteLength })) > 0) {
fs.writeSync(destFile, buffer, { offset: 0, length: bytesRead });
}
// 关闭文件
fs.closeSync(srcFile);
fs.closeSync(destFile);
console.log('文件拷贝成功');
} else {
console.error('源文件不存在');
}