在 CentOS(Linux)下,使用 readdir() 读取目录时,默认会返回所有条目,包括以 . 开头的隐藏文件(如 .bashrc、. 和 ..)。
核心思路:判断文件名是否以 . 开头。
#include <stdio.h>
#include <dirent.h>
#include <string.h>
int main(int argc, char *argv[]) {
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;
}
✅ 这样就不会显示:
....bashrc.ssh 等如果你是在 shell 中而不是 C 程序:
ls -A
或
for f in *; do
echo "$f"
done
readdir 一定会返回 . 和 .. 吗?是的,一定会返回,需要手动过滤。
. 和 ..,保留其他隐藏文件?if (strcmp(entry->d_name, ".") == 0 ||
strcmp(entry->d_name, "..") == 0)
continue;
if (entry->d_type == DT_REG) // 普通文件
| 需求 | 方法 |
|---|---|
| 过滤所有隐藏文件 | d_name[0] == '.' |
只过滤 . 和 .. |
strcmp 判断 |
| Shell 中 | ls -A |
如果你是 C / C++ / Python / Shell 哪种场景,我可以给你更具体的示例。