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

How do I check if file name is a directory or not in C?

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


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

您可能打算使用strcmp

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

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

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

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


就个人而言,我喜欢stat()和fstat()。然后,您将看到输出的st_模式字段,其中包含类似s_isdir(m)的宏。


如果您使用的是Linux,那么可以使用getdents,其中包括条目类型。否则,您可能需要使用statlstat来获取每个项目的类型信息。