如何在C中检查文件名是否是目录?

时间:2015-05-05 23:02:25

标签: c directory directory-structure

我使用if(strstr(dir->d_name, ".") == NULL && strstr(dir->d_name, "..")来检查它是否是一个目录/子目录,但是这仍然打印出一些不是目录的文件......我正在使用直接结构和DIR。

3 个答案:

答案 0 :(得分:4)

strstr在另一个字符串中搜索子字符串,因此它将为包含单个(井或双)句点的每个名称返回一个匹配项。

您可能打算使用strcmp

if (strcmp(dir->d_name, ".") && strcmp(dir->d_name, ".."))
   .. not one of the default root folders ..

在此之前或之后,您可以检查它是否是文件夹:

if (dir->d_type == DT_DIR)
  ..

或使用stat。 (请注意,某些文件系统类型可能不支持d_type。)

答案 1 :(得分:1)

就个人而言,我喜欢stat()和fstat()。然后使用类似S_ISDIR(m)的宏查看输出的st_mode字段。

答案 2 :(得分:0)

如果您使用的是Linux,则可以使用包含条目类型的getdents。否则,您可能必须使用stat/lstat来获取每个项目的类型信息。