在 Linux 下使用 readdir() 读取目录时,隐藏文件(以 . 开头的文件)本来就会被读出来,只是通常你在代码或输出里“忽略”了它们。
下面分几种情况说明。
readdir() 会返回目录中所有条目,包括:
.bashrc). 和 ..示例:
#include <stdio.h>
#include <dirent.h>
int main() {
DIR *dir = opendir(".");
struct dirent *entry;
while ((entry = readdir(dir)) != NULL) {
printf("%s\n", entry->d_name);
}
closedir(dir);
return 0;
}
运行后会看到:
.
..
.bashrc
hidden.txt
normal.txt
隐藏文件的定义是:文件名以 . 开头
while ((entry = readdir(dir)) != NULL) {
if (entry->d_name[0] == '.') {
printf("hidden: %s\n", entry->d_name);
}
}
⚠️ 注意:这样会包含 . 和 ..
. 和 ..while ((entry = readdir(dir)) != NULL) {
if (entry->d_name[0] == '.' &&
strcmp(entry->d_name, ".") != 0 &&
strcmp(entry->d_name, "..") != 0) {
printf("hidden file: %s\n", entry->d_name);
}
}
ls 默认不显示,是因为 ls 自己过滤了opendir 的路径影响隐藏文件opendir("/some/dir") 照样能读 .hidden隐藏不是文件属性,而是命名规则,所以一般用文件名判断即可。
如果你是在 C / C++ / Python / Shell 里用 readdir,或者想递归读取隐藏文件,可以告诉我具体语言,我可以给你更完整的例子。