温馨提示×

ubuntu readdir怎么写代码

小樊
41
2026-10-06 14:26:40
栏目: 智能运维

在 Ubuntu(Linux)下使用 C/C++ 读取目录,通常有两种常见方式:


一、使用 opendir / readdir(POSIX 标准,最常用)

示例代码(C 语言)

#include <stdio.h>
#include <dirent.h>
#include <sys/types.h>

int main(int argc, char *argv[])
{
    DIR *dir;
    struct dirent *entry;

    if (argc < 2) {
        printf("Usage: %s <directory>\n", argv[0]);
        return 1;
    }

    dir = opendir(argv[1]);
    if (dir == NULL) {
        perror("opendir");
        return 1;
    }

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

    closedir(dir);
    return 0;
}

编译运行

gcc readdir_example.c -o readdir_example
./readdir_example /path/to/dir

二、只读取普通文件(过滤 . 和 ..)

while ((entry = readdir(dir)) != NULL) {
    if (entry->d_type == DT_REG) { // 普通文件
        printf("File: %s\n", entry->d_name);
    } else if (entry->d_type == DT_DIR) {
        printf("Dir:  %s\n", entry->d_name);
    }
}

三、C++ 示例(同样可用 readdir)

#include <iostream>
#include <dirent.h>

int main(int argc, char* argv[]) {
    DIR* dir = opendir(argv[1]);
    if (!dir) {
        perror("opendir");
        return 1;
    }

    dirent* ent;
    while ((ent = readdir(dir)) != nullptr) {
        std::cout << ent->d_name << std::endl;
    }

    closedir(dir);
    return 0;
}

四、补充说明

  • readdir 返回的是 struct dirent*
  • d_name:文件名
  • d_type:文件类型(DT_REG、DT_DIR 等)
  • 线程安全版本:readdir_r(已不推荐)
  • 现代 C++ 也可用 <filesystem>(C++17)

如果你需要:

  • 递归遍历目录
  • 过滤特定后缀
  • 获取文件大小 / 修改时间
  • 用 C++17 filesystem 写法

可以告诉我,我可以直接给你对应代码。

0 踩