HarmonyOS 鸿蒙Next关于使用fs.copyfile的问题

发布于 1周前 作者 songsunli 来自 鸿蒙OS

HarmonyOS 鸿蒙Next关于使用fs.copyfile的问题

应用在通过fs.copyfile接口将rawFile下的文件拷贝到文件系统后,大小和内容均出现问题,附代码和问题截图(拷贝过程可正常执行完,过程未出现异常和报错),请问API的使用上是否有什么问题?


API链接:
https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-file-fs-V5#fscopyfile

相关代码:
/**
*@auth aleckmason
*@date 2024/5/2
*@desc 文件拷贝测试
*/
static copyRawFileToSdcard(context : common.Context) {
let destRoot = context.filesDir;
let srcFileName = “privacy_policy.txt” //rawFile下的文件名
let destFilePath = destRoot + “/” + PATH.MEDIA_PATH + “/” + srcFileName;
console.log("copyRawFileToSdcard filepath : " + destFilePath)
//创建文件目录
fs.mkdir(destRoot + “/” + PATH.MEDIA_PATH).catch((exp:Error) => {
//可能目录已存在或者没有权限
console.log("copyRawFileToSdcard mkdir fail : " + JSON.stringify(exp) )
}).then(() => {
//创建目录成功
console.log("copyRawFileToSdcard mkdir success " )
//获取rawFile的fd
return context.resourceManager.getRawFd(srcFileName);
}).then((data) => {
//拷贝rawFile内容到本地文件存储
console.log("copyRawFileToSdcard mkdir fd " + data.fd )
return fs.copyFile(data.fd,destFilePath,0)
}).catch((exp:Error) => {
//文件拷贝失败
console.log("copyRawFileToSdcard write exception " + JSON.stringify(exp))
}).then(() => {
//文件拷贝成功
console.log("copyRawFileToSdcard write succes ")
})
}

3 回复
可以使用getRawFileContent获取rawfile文件内容,再写入新文件,提供参考:
copyFile(): void {

let destRoot = filesDir;

let srcFileName = “test.txt” //rawFile下的文件名

let destFilePath = destRoot + “/” + PATH.MEDIA_PATH + “/” + “test.txt”;

try {

context.resourceManager.getRawFileContent(srcFileName, (error: BusinessError, value: Uint8Array) => {

if (error != null) {

console.error("error is " + error);

} else {

let rawFile = value;

let fileStream = fileIo.createStreamSync(destFilePath, “w+”);

fileStream.writeSync(rawFile.buffer);

fileStream.close();

}

});

} catch (error) {

let code = (error as BusinessError).code;

let message = (error as BusinessError).message;

console.error(callback getRawFileContent failed, error code: ${code}, message: ${message}.);

}

}

你觉得这看着不奇怪吗

cke_484.png

关于HarmonyOS鸿蒙Next使用fs.copyfile的问题,以下是一些可能的解决思路和注意事项:

  1. 权限问题:确保应用已获取必要的文件读写权限。例如,如果拷贝的是媒体图片文件,需要获取ohos.permission.READ_IMAGEVIDEO权限。
  2. 路径问题:检查源文件和目标文件的路径是否正确。路径错误或不存在可能导致拷贝失败。
  3. 文件状态:确保源文件在拷贝过程中是可读的,且目标文件路径在拷贝前不存在(除非需要覆盖文件)。
  4. API使用:按照HarmonyOS的官方文档正确使用fs.copyfile API。注意API的参数和返回值,确保传递正确的参数并处理可能的异常。
  5. 文件大小和内容:如果拷贝后文件大小和内容出现问题,检查源文件是否完整无损,以及拷贝过程中是否出现了数据丢失或损坏。

鸿蒙Next高级教程已发布,可以先学学https://www.itying.com/goods-1204.html

回到顶部