在 CentOS(本质是 Linux 下 C/C++ 编程)里使用 readdir() 读取目录时,隐藏文件通常是指以 . 开头的文件(如 .bashrc、.ssh)。
readdir() 本身不会自动过滤隐藏文件,需要你在代码里手动判断。
#include <stdio.h>
#include <dirent.h>
#include <string.h>
int main() {
DIR *dir;
struct dirent *entry;
dir = opendir(".");
if (!dir) {
perror("opendir");
return 1;
}
while ((entry = readdir(dir)) != NULL) {
// 过滤隐藏文件(以 '.' 开头)
if (entry->d_name[0] == '.')
continue;
printf("%s\n", entry->d_name);
}
closedir(dir);
return 0;
}
✅ 这样就不会显示 . 和 .. 以及所有 .xxx 隐藏文件。
. 和 .. 是什么?. 表示当前目录.. 表示上级目录. 开头的,所以上面的判断会一起过滤掉。. 和 ..?一般不需要,但如果真要:
if (strcmp(entry->d_name, ".") == 0 ||
strcmp(entry->d_name, "..") == 0)
continue;
readdir() 只能拿到名字,不能保证是文件还是目录。
如需判断类型,可用:
stat()entry->d_type(部分文件系统支持)示例(仅显示普通文件):
if (entry->d_type == DT_REG) {
printf("%s\n", entry->d_name);
}
如果你只是想在命令行过滤:
ls -A
或
find . -maxdepth 1 -name '[^.]*'
如果你说的是:
可以告诉我具体场景,我可以给你更合适的代码。