HarmonyOS鸿蒙Next中file://docs/storage/Users/currentUser/目录下内容如何拷贝到沙箱中

HarmonyOS鸿蒙Next中file://docs/storage/Users/currentUser/目录下内容如何拷贝到沙箱中

copyFileToApp(src: string, dst: string) {
  try {
    if (FileUtil.accessSync(dst) == false) {
      FileUtil.mkdirSync(dst)
    }
    let fileArray = src.split("/");
    let fileName = fileArray[fileArray.length-1];

    let file = fs.openSync(src, fs.OpenMode.READ_ONLY);
    let file2 = fs.openSync(dst + '/' + fileName, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
    fs.copyFileSync(file.fd, file2.fd);
    fs.closeSync(file);
    fs.closeSync(file2);
    return dst + '/' + fileName;
  } catch (e) {
    Logger.debug(TAG, "txy copy error:" + e)
    return '';
  }
}

拷贝文件会提示Operation not permitted如何解决


更多关于HarmonyOS鸿蒙Next中file://docs/storage/Users/currentUser/目录下内容如何拷贝到沙箱中的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

在HarmonyOS Next中,要将file://docs/storage/Users/currentUser/目录内容拷贝到沙箱,需使用@ohos.file.fs API。具体步骤:

  1. 获取源目录和目标目录的File实例
  2. 使用listFile()获取源目录文件列表
  3. 通过copyFile()copyDir()方法执行拷贝

关键代码示例:

import fs from '@ohos.file.fs';
let srcDir = 'file://docs/storage/Users/currentUser/';
let dstDir = context.filesDir + '/';
fs.copyDir(srcDir, dstDir).then(() => {
    console.log('Copy succeeded');
}).catch((err) => {
    console.error('Copy failed: ' + err);
});

更多关于HarmonyOS鸿蒙Next中file://docs/storage/Users/currentUser/目录下内容如何拷贝到沙箱中的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS Next中,由于沙箱机制的安全限制,直接访问file://docs/storage/Users/currentUser/这样的路径是不允许的。要解决"Operation not permitted"错误,需要使用正确的文件访问API和沙箱路径。

正确的做法是:

  1. 使用@ohos.file.fs@ohos.file.fileuri模块
  2. 获取正确的沙箱路径,通过context获取应用沙箱目录
  3. 使用uri方式访问文件

修改后的核心代码示例:

import fs from '@ohos.file.fs';
import fileUri from '@ohos.file.fileuri';

async function copyToSandbox(context) {
  try {
    const sandboxDir = context.filesDir; // 获取应用沙箱目录
    const srcUri = 'file://docs/storage/Users/currentUser/test.txt'; // 示例源文件
    
    // 使用uri方式打开文件
    const srcFile = await fileUri.getUriFile(srcUri);
    const dstPath = sandboxDir + '/test.txt';
    
    const dstFile = fs.openSync(dstPath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
    fs.copyFileSync(srcFile.fd, dstFile.fd);
    fs.closeSync(srcFile);
    fs.closeSync(dstFile);
    return dstPath;
  } catch (e) {
    console.error('Copy failed:', e);
    return '';
  }
}

注意:实际使用时需要确保应用有正确的文件访问权限,并在配置文件中声明所需的权限。

回到顶部