如何在C中调用readdir()时检查ent.d-> name是文件还是目录,其中ent的类型为struct dirent *。
答案 0 :(得分:2)
S_ISREG()
和S_ISDIR()
与stat(2)
一起使用时的含义。有关详细信息,请参见其手册页。
如果您不能完全符合POSIX标准,则可以分别使用DT_REG()
和DT_DIR()
检查目录性与常规性。这在readdir(3)
的手册页中提到。
答案 1 :(得分:0)
另一种方法是尝试在d_name上调用opendir()并查看它是否返回null:
int isDir(struct dirent *ent)
{
if (ent && strcmp(ent->d_name, ".") && strcmp(ent->d_name, "..")) // don't include pwd and parent dir
{
DIR *isDir = opendir(ent->d_name);
if (isDir)
return 1;
}
return 0;
}