在 Ubuntu(Linux)下,使用 readdir 获取目录中的文件,通常配合 opendir / readdir / closedir 这一组 POSIX 接口使用。
下面给你一个完整、可直接编译运行的示例。
opendir() // 打开目录
↓
readdir() // 逐个读取目录项
↓
closedir() // 关闭目录
#include <stdio.h>
#include <dirent.h>
#include <sys/types.h>
int main(int argc, char *argv[]) {
DIR *dir;
struct dirent *entry;
if (argc < 2) {
fprintf(stderr, "用法: %s <目录>\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
例如:
./readdir_example .
struct dirent {
ino_t d_ino; // inode 号
off_t d_off; // 偏移
unsigned short d_reclen; // 记录长度
unsigned char d_type; // 文件类型
char d_name[]; // 文件名
};
DT_REG 普通文件
DT_DIR 目录
DT_LNK 符号链接
while ((entry = readdir(dir)) != NULL) {
if (entry->d_type == DT_REG) {
printf("文件: %s\n", entry->d_name);
}
}
. 和 ..if (strcmp(entry->d_name, ".") == 0 ||
strcmp(entry->d_name, "..") == 0)
continue;
如需大小、权限、修改时间,配合:
stat() / lstat()
如果你需要 递归遍历目录 或 C++ / Python 版本,也可以告诉我。