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

如何检查文件名是否为C中的目录?,c,directory,directory-structure,C,Directory,Directory Structure,我使用的是if(strstrstr(dir->d_name,“.”)=NULL&&strstrstr(dir->d_name,“…”)检查它是否是一个目录/子目录,但这仍然打印出一些不是目录的文件…我使用direct struct和DIR。如果你在Linux上,你可以使用它包含条目类型。否则你可能必须使用它来获取每个项目的类型信息。str搜索其中的子字符串另一个字符串,因此它将为每个包含单句点(well或double)的名称返回匹配项 您可能打算使用strcmp: if (strcmp(dir-

我使用的是
if(strstrstr(dir->d_name,“.”)=NULL&&strstrstr(dir->d_name,“…”)
检查它是否是一个目录/子目录,但这仍然打印出一些不是目录的文件…我使用direct struct和DIR。

如果你在Linux上,你可以使用它包含条目类型。否则你可能必须使用它来获取每个项目的类型信息。

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

您可能打算使用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

我个人喜欢stat()和fstat()。然后,使用S_ISDIR(m)等宏查看输出的st_mode字段.

您能再显示一点代码吗?根据操作系统的不同,如果您阅读,您将看到它有一个名为
d_type
的成员,这是目录项的“文件”类型。有关不使用
readdir()时的答案,请参阅
等,或者当您的系统仅提供POSIX规范为
struct dirent
定义的最小信息时(即
d_name
d_ino
)。更适合的系统可能会在扩展信息中提供文件类型,该扩展信息直接存储在
struct dirent
结构中。