HarmonyOS 鸿蒙Next CoreFileKit的rename让人迷惑之处

CoreFileKit的rename定义如下:

/**
 * Rename file.
 *
 * @param { string } oldPath - oldPath.
 * @param { string } newPath - newPath.
 * @returns { Promise<void> } The promise returned by the function.
 * @throws { BusinessError } 13900001 - Operation not permitted
 * @throws { BusinessError } 13900002 - No such file or directory
 * @throws { BusinessError } 13900008 - Bad file descriptor
 * @throws { BusinessError } 13900011 - Out of memory
 * @throws { BusinessError } 13900012 - Permission denied
 * @throws { BusinessError } 13900013 - Bad address
 * @throws { BusinessError } 13900014 - Device or resource busy
 * @throws { BusinessError } 13900015 - File exists
 * @throws { BusinessError } 13900016 - Cross-device link
 * @throws { BusinessError } 13900018 - Not a directory
 * @throws { BusinessError } 13900019 - Is a directory
 * @throws { BusinessError } 13900020 - Invalid argument
 * @throws { BusinessError } 13900025 - No space left on device
 * @throws { BusinessError } 13900027 - Read-only file system
 * @throws { BusinessError } 13900028 - Too many links
 * @throws { BusinessError } 13900032 - Directory not empty
 * @throws { BusinessError } 13900033 - Too many symbolic links encountered
 * @throws { BusinessError } 13900041 - Quota exceeded
 * @throws { BusinessError } 13900042 - Unknown error
 * @syscap SystemCapability.FileManagement.File.FileIO
 * @crossplatform
 * @atomicservice
 * @since 11
 */
declare function rename(oldPath: string, newPath: string): Promise<void>;

一般该接口比较容易触发的错误码应该有:13900002、13900015、13900018、13900019、13900032。

按照接口描述进行猜测:

13900002:oldPath指向的文件或文件夹不存在。

13900015:重命名文件时newPath已被文件占位。

13900018:重命名文件夹时newPath已被文件占位。

13900019:重命名文件时newPath已被文件夹占位。

13900032:重命名文件夹时newPath已被非空文件夹占位。

然而实测有出入:

  1. 如果oldPath是一个目录:

    newPath不存在,rename成功,符合逻辑。

    newPath存在,且newPath为文件,rename失败,抛出13900018,符合逻辑。

    newPath存在,且newPath为空目录,rename成功,符合逻辑。

    newPath存在,且newPath为非空目录,rename失败,抛出13900032,符合逻辑。

  2. 如果oldPath是一个文件,

    newPath不存在,rename成功,符合逻辑。

    newPath存在,且newPath为文件,rename成功,不会抛出13900015错误,用oldPath的文件覆盖掉newPath的文件。有点奇怪。

    newPath存在,且newPath为目录,rename失败,抛出13900019,符合逻辑。


更多关于HarmonyOS 鸿蒙Next CoreFileKit的rename让人迷惑之处的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于HarmonyOS 鸿蒙Next CoreFileKit的rename让人迷惑之处的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


作为IT专家,对于HarmonyOS 鸿蒙Next CoreFileKit的rename功能,我理解其可能带来的迷惑之处。该功能主要用于重命名文件或目录,但在实际操作中,可能会遇到一些让用户感到困惑的问题。

首先,rename操作可能受到权限控制的影响。在HarmonyOS Next中,每个应用的数据都存储在独立的沙箱目录中,防止未经授权的访问。因此,如果应用尝试重命名不属于其沙箱目录中的文件或目录,可能会因为权限不足而失败。

其次,rename操作可能涉及文件系统的不同分类。HarmonyOS Next支持本地文件系统和分布式文件系统,而这两种文件系统的操作方式和限制可能有所不同。例如,分布式文件系统可能涉及跨设备的文件访问,这可能会增加rename操作的复杂性和潜在的问题。

此外,rename操作的实现可能依赖于底层的文件系统驱动和API。如果底层驱动或API存在缺陷或不稳定,可能会影响rename操作的正常执行。

最后,开发者在使用rename功能时,需要仔细考虑其应用场景和潜在的风险。例如,在重命名文件或目录之前,最好先检查其是否存在,以及是否具有足够的权限进行操作。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部