温馨提示×

readdir读取目录会出错吗

小樊
37
2026-08-29 07:11:28
栏目: 编程语言

会的,readdir 可能出错,而且在实际开发中很常见。是否出错、怎么出错,取决于你使用的语言、目录是否存在、权限是否足够、目录是否正在被修改等。

下面以 最常见场景 说明。


一、常见错误原因(通用)

无论哪种语言,readdir 类函数通常会在以下情况下出错:

  1. 目录不存在
  2. 权限不足
  3. 不是一个目录
  4. 目录被并发删除或修改
  5. 路径非法或过长
  6. 系统资源耗尽(文件描述符、内存)

二、C 语言 readdir(最常见)

示例代码

#include <dirent.h>
#include <stdio.h>

int main() {
    DIR *dir = opendir("/some/path");
    if (dir == NULL) {
        perror("opendir failed");
        return 1;
    }

    struct dirent *entry;
    while ((entry = readdir(dir)) != NULL) {
        printf("%s\n", entry->d_name);
    }

    if (errno != 0) {
        perror("readdir error");
    }

    closedir(dir);
    return 0;
}

出错点说明

函数 可能出错
opendir 目录不存在、权限不足、不是目录
readdir 目录被删除、系统错误
closedir 一般不失败

⚠️ 注意

  • readdir 返回 NULL 不一定表示错误
  • 必须检查 errno 才能判断是否真的出错

三、Node.js fs.readdir

常见错误示例

const fs = require('fs');

fs.readdir('/some/path', (err, files) => {
    if (err) {
        console.error('readdir error:', err.code, err.message);
        return;
    }
    console.log(files);
});

常见错误码

错误码 含义
ENOENT 目录不存在
EACCES 权限不足
ENOTDIR 不是目录
EMFILE 文件描述符耗尽

Node.js 的 readdir 几乎一定会出错,如果不处理异常会导致程序崩溃


四、Shell / 命令行

ls /not/exist

虽然 ls 看起来简单,但底层也是 readdir,错误会直接输出:

ls: cannot access '/not/exist': No such file or directory

五、如何避免 / 处理错误(通用建议)

  1. 先判断路径是否存在
  2. 判断是否是目录
  3. 捕获异常 / 检查返回值
  4. 不要假设目录不会被并发修改
  5. 生产代码中一定要处理错误

六、一句话总结

readdir 会出错
❌ 不能假设它一定成功
✅ 是否出错取决于 路径、权限、系统状态

如果你能告诉我:

  • 使用的是 哪种语言
  • 运行在 Linux / Windows / macOS
  • 同步还是异步

我可以给你更精确的示例和最佳实践。

0