FileUtilsOpenHarmony::isFileExistInternal 有问题

  • Creator 版本:3.8.4-oh分支
  • DevEco Studio NEXT Developer Beta2

构建版本:5.0.3.502, built on July 28, 2024

"compatibleSdkVersion": "4.1.0(11)"

  • 目标平台:纯血鸿蒙 HarmonyOS Next 0.0.36

  • 重现方式:

// 先拿一个可读写路径
const path = native.fileUtils.getWritablePath() + "test.txt"

// 然后进行写入
native.fileUtils.writeStringToFile("test", path);

// 然后判断文件是否存在
const isFileExist = native.fileUtils.isFileExist(path);
// 预期应该是要存在 但是结果输出 false
console.log("isFileExist", isFileExist)
  • 手机型号:华为 Mate 60 Pro

我看了下源码发现问题出现在这

然后我参考了FileUtils-ohos的实现, 发现之前是有区分绝对路径和相对路径的

然后我照着改, 发现这样确实就正常了

@king668

再说多一个问题 原本的 native.fileUtils.getWritablePath() 获取到的值最后不带 /

这个行为和Android和iOS都不同, 我自己把 NapiHelper.cppnapiWritablePathInit 方法改了下, 最后应该要加上 /

FileUtilsOpenHarmony::_ohWritablePath = info[0].As<Napi::String>().Utf8Value().append("/");

而且我看 FileUtils-ohosgetWritablePath 实现也是最后带 /


不是一样的么?

可写路径比较特殊,这个路径是从主线程传下来的,是一个沙盒的路径。

OH_ResourceManager_OpenRawFile 打不开沙盒环境的绝对路径

OH_ResourceManager_OpenRawFile这个接口是只能加载资源里面的路径
沙盒里的绝对路径,是用C的标准接口来读取的

这个我知道 我是指 native.fileUtils.getWritablePath() 拿到的值最后没有带 /

但是android和iOS最后都是带/

好的,我看看

所以 native.fileUtils.isFileExist 传沙盒的绝对路径就有问题了

嗯,确实有问题,我修改下。感谢 感谢

:+1: :+1: :+1:

@king668 我还发现了一个新问题 这里勾选加密脚本不会生效 是否跟现在运行方式是js都丢在了entry/src/main/ets/cocos/assets下运行有关

经过一番查阅是因为下面这个方法被删掉了

不支持加密,openharmony不支持动态加载

:ok_hand:

@king668

这个currentTime方法是不是有问题, 他明明是异步的, 但是却直接返回了

然后我现在正在找cocos的ts层和鸿蒙的交互, 发现这样是能传值和回调, 但是只能是异步的, 没看到有同步的

不会是要写cpp代码才能同步回调值吧…