在 Linux 文件系统中,所谓隐藏文件是文件名以 .
开头的文件(例如 .bashrc
、.git
、.config
等)。
在编程层面,opendir
+ readdir
并不会自动排除隐藏文件。
只要你不在代码中手动过滤,readdir
会把目录下所有文件(包括隐藏文件)都读出来。
核心逻辑
#include <stdio.h>
#include <dirent.h>int main(void) {DIR *dir;struct dirent *entry;dir = opendir(".");if (dir == NULL) {perror("opendir");return 1;}while ((entry = readdir(dir)) != NULL) {printf("%s\n", entry->d_name);}closedir(dir);return 0;
}
这段程序会打印当前目录下的所有文件名,包括:
-
普通文件
-
隐藏文件(名字以
.
开头的文件) -
特殊目录项
.
和..
注意事项
-
如果你希望只列出隐藏文件,可以在
while
中加条件:
if (entry->d_name[0] == '.') {printf("%s\n", entry->d_name);
}
这样就只会输出以 .
开头的文件名(包括 .
和 ..
目录)。
-
如果你希望排除
.
和..
,可以写:
if (entry->d_name[0] == '.' &&strcmp(entry->d_name, ".") != 0 &&strcmp(entry->d_name, "..") != 0) {printf("%s\n", entry->d_name);
}
小结
-
opendir
和readdir
默认会读出目录下的所有文件名,包括隐藏文件。 -
是否显示隐藏文件完全取决于你在代码中怎么处理
d_name
。 -
如果要获取隐藏文件,记得对
d_name[0] == '.'
进行条件判断。 -
不需要额外的参数或特殊系统调用。