HarmonyOS 鸿蒙Next实现拷贝文件到沙箱功能示例代码

HarmonyOS 鸿蒙Next实现拷贝文件到沙箱功能示例代码

介绍

本示例基于openSync、writeSync接口实现了拷贝文件到沙箱。 实现拷贝文件到沙箱功能源码链接

效果预览

使用说明

点击按钮拷贝,拷贝之后即可保存图片文件。

实现思路

  1. 使用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')
      }

    }
  })
  1. 保存到媒体库
// 获取需要保存到媒体库的位于应用沙箱的图片/视频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.fileohos.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('源文件不存在');
}
回到顶部