HarmonyOS StrUtil getErrnoToString:用错误码查系统错误信息,调试效率翻倍
2026/6/13 20:40:45 网站建设 项目流程

文章目录

    • 背景
      • 方法总览
      • errno 是什么?
      • 基本用法
      • 常见 errno 错误码速查
      • 实际开发中怎么用?
      • 与 HarmonyOS 自定义错误码的区别
      • 完整示例代码
      • 写在最后

背景

近期发现一款很有意思的HarmonyOS 三方库, 地址 @pura/harmony-utils(V1.4.0) , 作者是"桃花镇童长老", 我这里也是直接通过该作者公布的源码进行案例编写进行,写了到目前写了一部分demo ,感觉确实很有帮助,这里呢也是开始写一个系列的演示demo 供大家参考。如有帮助可以在OpenHarmony中进行下载安装进行使用哦

案例demo导航展示

↓↓↓↓↓↓接下来言归正传 ↓↓↓↓
调试 HarmonyOS 应用的时候,有没有遇到过这种情况:系统 API 抛出一个数字错误码,比如21322,完全不知道什么意思?

StrUtil.getErrnoToString()就是用来解决这个问题的。传入错误码,它直接告诉你这个错误是什么。

方法总览

errno 是什么?

errno是 POSIX 标准里定义的错误码系统,源自 C 语言,Unix/Linux 系统广泛使用。HarmonyOS 底层是基于 Linux 内核的,所以很多系统调用(文件操作、网络操作、权限检查)出错时会返回标准的 errno 错误码。

这些错误码是整数,但人看整数完全不知道代表什么意思。比如:

  • 2=ENOENT:No such file or directory(文件或目录不存在)
  • 13=EACCES:Permission denied(没有权限)
  • 22=EINVAL:Invalid argument(参数无效)

记这些数字当然没人记得住,所以需要getErrnoToString来转换。

基本用法

this.Btn('getErrnoToString(2) → ENOENT','#641E16',()=>{consts=StrUtil.getErrnoToString(2);this.addLog(`getErrnoToString(2) → "${s}"`);})this.Btn('getErrnoToString(13) → EACCES','#641E16',()=>{consts=StrUtil.getErrnoToString(13);this.addLog(`getErrnoToString(13) → "${s}"`);})

实际运行结果

  • getErrnoToString(2)"No such file or directory""ENOENT"
  • getErrnoToString(13)"Permission denied""EACCES"

常见 errno 错误码速查

开发中最常遇到的错误码:

errno常量名含义典型触发场景
1EPERMOperation not permitted操作不被允许
2ENOENTNo such file or directory读取不存在的文件
13EACCESPermission denied没有文件读写权限
17EEXISTFile exists创建已存在的文件
20ENOTDIRNot a directory把文件当目录用
21EISDIRIs a directory把目录当文件用
22EINVALInvalid argument传了非法参数
28ENOSPCNo space left on device存储空间不足
36ENAMETOOLONGFile name too long文件名太长

实际开发中怎么用?

最实用的场景是在catch块里:

import{fileIoasfs}from'@kit.CoreFileKit';try{constfile=fs.openSync('/nonexistent/path/file.txt');}catch(e){// e.code 就是 errnoconsterrMsg=StrUtil.getErrnoToString(e.code);console.error(`文件操作失败 [${e.code}]:${errMsg}`);// 输出:文件操作失败 [2]: No such file or directory}

这样日志里就不只是一个数字,而是可读的错误信息,调试时一目了然。

与 HarmonyOS 自定义错误码的区别

HarmonyOS 除了 errno 之外,还有自己的 API 错误码体系(通常是 6 位数,比如201000)。getErrnoToString只适用于 errno 这套标准错误码,不适用于 HarmonyOS 的业务错误码。

如果你拿到的是 HarmonyOS 的 6 位业务错误码,需要去查对应模块的官方文档,getErrnoToString查不到。

完整示例代码

getErrnoToString集成到错误处理流程里的完整示例:

import{StrUtil}from'../Utils/StrUtil';functionhandleFileError(code:number){consterrMsg=StrUtil.getErrnoToString(code);if(code===2){console.warn(`文件不存在:${errMsg}`);// 处理文件不存在的逻辑}elseif(code===13){console.error(`权限不足:${errMsg}`);// 引导用户授权}else{console.error(`未知错误 [${code}]:${errMsg}`);}}

写在最后

getErrnoToString是个小工具,但在调试文件操作、系统调用问题时真的能省不少时间。把它加到你的错误处理工具箱里,遇到奇怪的错误码直接查,不用再去搜索"errno 2 是什么意思"。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询