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

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

1
你能展示更多的代码吗? - Paul Rooney
1
根据操作系统,如果你阅读readdir手册页,你会看到它有一个称为“d_type”的成员,它是目录条目的“文件”类型。 - Some programmer dude
查看 在 Unix 系统调用中检查目录是否存在 获取答案,当不使用 readdir() 等函数或者当你的系统只提供 POSIX 规范中 <dirent.h> 定义的最少信息(即 d_named_ino),这种情况下也可用。更为兼容的系统可能会直接在 struct dirent 结构体中存储扩展信息中的文件类型。 - Jonathan Leffler
3个回答

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

就我个人而言,我喜欢使用stat()和fstat()函数。然后可以使用像S_ISDIR(m)这样的宏来查看输出的st_mode字段。


0

如果你使用的是Linux系统,你可以使用getdents来获取每个条目的类型信息。否则,你可能需要使用stat/lstat来获取每个条目的类型信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接