在 Linux 下使用 readdir() 读取目录时,隐藏文件(以 . 开头的文件)本身是可以被读到的,只是很多示例代码会人为跳过它们。下面分几种情况说明。
readdir() 读取隐藏文件(最基础)readdir() 会返回目录中所有条目,包括:
.bashrc). 和 ..#include <stdio.h>
#include <dirent.h>
int main() {
DIR *dir = opendir(".");
struct dirent *entry;
if (!dir) {
perror("opendir");
return 1;
}
while ((entry = readdir(dir)) != NULL) {
printf("%s\n", entry->d_name);
}
closedir(dir);
return 0;
}
✅ 这个程序会列出所有文件,包括隐藏文件
常见原因是人为过滤掉了:
if (entry->d_name[0] == '.')
continue; // 跳过隐藏文件
如果你不想跳过,直接去掉这个判断即可。
如果你想只处理隐藏文件:
while ((entry = readdir(dir)) != NULL) {
if (entry->d_name[0] == '.') {
printf("hidden: %s\n", entry->d_name);
}
}
⚠️ 注意:. 和 .. 也会被匹配,可用:
if (entry->d_name[0] == '.' &&
!(entry->d_name[1] == '\0' ||
(entry->d_name[1] == '.' && entry->d_name[2] == '\0'))) {
printf("hidden: %s\n", entry->d_name);
}
scandir()(可过滤)struct dirent **namelist;
int n = scandir(".", &namelist, NULL, alphasort);
for (int i = 0; i < n; i++) {
printf("%s\n", namelist[i]->d_name);
}
getdents()(底层,不常用)系统调用级,更复杂,一般不用。
ls # 不显示隐藏文件
ls -a # 显示隐藏文件
readdir() 相当于 ls -a
✅ readdir() 默认就能读取隐藏文件
❌ 不是 API 限制,而是代码逻辑过滤
✅ 隐藏文件只是文件名以 . 开头
如果你用的是 C++ / Python / Shell 脚本,我也可以给你对应示例。