在C中的readdir()中标识目录

时间:2013-03-22 13:40:20

标签: c

如何在C中调用readdir()时检查ent.d-> name是文件还是目录,其中ent的类型为struct dirent *。

2 个答案:

答案 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;
}