在 Linux 下使用 readdir() 读取目录时,隐藏文件(以 . 开头的文件)其实也会被读出来,只是它们通常需要你自己在程序里判断/显示。
下面分几种情况说明。
✅ 能。
readdir() 会返回目录下的所有条目,包括:
.bashrc、.git). 和 ..示例代码:
#include <dirent.h>
#include <stdio.h>
int main() {
DIR *dir = opendir(".");
struct dirent *entry;
while ((entry = readdir(dir)) != NULL) {
printf("%s\n", entry->d_name);
}
closedir(dir);
return 0;
}
运行后会看到 . 开头的文件。
隐藏文件的定义:文件名以 . 开头
if (entry->d_name[0] == '.') {
printf("隐藏文件: %s\n", entry->d_name);
}
if (entry->d_name[0] != '.') {
printf("%s\n", entry->d_name);
}
ls 为什么默认看不到隐藏文件?因为 ls 默认过滤掉以 . 开头的文件,不是系统层面隐藏。
用 ls -a 就能看到,和 readdir() 的行为一致。
. 和 .. 也是隐藏文件吗?. 开头if (strcmp(entry->d_name, ".") == 0 ||
strcmp(entry->d_name, "..") == 0)
continue;
如果你需要递归读取所有文件(包括隐藏的),可以结合 stat() + 判断 DT_DIR。
| 需求 | 做法 |
|---|---|
| 读隐藏文件 | readdir() 直接读 |
| 判断隐藏 | d_name[0] == '.' |
| 排除隐藏 | d_name[0] != '.' |
排除 . .. |
strcmp 判断 |
如果你用的是 C++ / Python / shell,或者想 按权限过滤隐藏文件,可以继续问。