在 Linux 下使用 readdir() 读取目录时,**“隐藏文件”**指的是以 . 开头的文件(如 .bashrc、.git)。
readdir() 不会自动跳过隐藏文件,需要你在代码里手动判断。
. 开头在 readdir() 返回的 struct dirent 中,用 d_name 判断即可。
#include <stdio.h>
#include <dirent.h>
#include <string.h>
int main() {
DIR *dir = opendir(".");
struct dirent *entry;
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;
}
. 和 ..通常 . 和 .. 也要忽略:
if (strcmp(entry->d_name, ".") == 0 ||
strcmp(entry->d_name, "..") == 0)
continue;
readdir() 不会自动隐藏 . 文件ls 默认不显示隐藏文件,但 readdir() 会if (entry.path().filename().string()[0] == '.') continue;
import os
for name in os.listdir('.'):
if name.startswith('.'):
continue
如果你是在 特定场景(比如递归遍历、特定文件系统、性能要求)下使用,可以告诉我,我可以给你更合适的写法。