【问题标题】:How do I check if file name is a directory or not in C?如何检查文件名是否是 C 中的目录?
【发布时间】:2015-07-15 21:04:00
【问题描述】:

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

【问题讨论】:

  • 你能显示更多代码吗?
  • 取决于操作系统,如果您阅读the readdir manual page,您会看到它有一个名为d_type 的成员,这是目录条目的“文件”类型。
  • 当不使用readdir() 等时,或者当您的系统仅提供来自<dirent.h>struct dirent 的POSIX 规范定义的最少信息(即d_named_ino)。更适应的系统可能会在扩展信息中提供文件类型,直接存储在struct dirent 结构中。

标签: c directory directory-structure


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2015-11-11
        • 1970-01-01
        • 2014-02-18
        • 2014-10-03
        • 2023-03-26
        • 1970-01-01
        • 1970-01-01
        • 2011-09-23
        • 2013-11-30
        相关资源
        最近更新 更多