【问题标题】:Getting list of files in a folder using C使用C获取文件夹中的文件列表
【发布时间】:2011-04-29 21:17:54
【问题描述】:

例如,我有一个文件夹的路径

/我的文件夹

或在 Windows 中:

C:\我的文件夹

我想获取该文件夹中所有文件的列表。我应该如何在 C 中这样做?

在 C++ 或 C99 中有何不同?

如何获取其文件夹列表?

感谢任何帮助。

【问题讨论】:

  • 这个问题与 C 或 C++ 无关,而与您使用的操作系统有关。请更准确。
  • @Jens 呃?你在哪里看到歧义?此外,它与 C 或 C++ 有很大关系。
  • C 作为一种语言对文件有 IO,但甚至不知道目录的概念。目录是一个操作系统概念,所以要回答这个问题,你必须了解操作系统。

标签: c++ c file-io c99


【解决方案1】:

在 POSIX 操作系统中,您可以调用 opendir() 和 readdir()。在 Windows 中,您可以调用 _findfirst() 和 _findnext()。只需稍加努力,您就可以在 Windows 下将自己的 opendir() 和 readdir() 实现为包装函数,以便您的应用程序代码可以在任何地方使用相同的 API。一个例子可以在here找到。

【讨论】:

    【解决方案2】:

    你可以使用dirent.h中声明的函数

    dirent.h 是 C POSIX 中的标头 C 编程语言库 包含以下结构 方便目录遍历。这 函数不是 C 的一部分 标准,但被认为是 “伪标准”,通常是 在平台之间移植。
    http://en.wikipedia.org/wiki/Dirent.h

    #include <dirent.h>
    
    int main(int argc, char **argv)
    {
        DIR *dir;
        struct dirent *de;
    
        dir = opendir("."); /*your directory*/
        while(dir)
        {
            de = readdir(dir);
            if (!de) break;
            printf("%i %s\n", de->d_type, de->d_name);
        }
        closedir(dir);
        return 0;
    }
    

    【讨论】:

      【解决方案3】:

      C++ 中最好的方法是使用 boost 文件系统。

      对于 C,您将需要平台 API (POSIX/WinAPI)。

      POSIX 文档 + 示例:http://www.opengroup.org/onlinepubs/009695399/functions/readdir.html

      【讨论】:

        【解决方案4】:

        查看我用 C/C++ 编写的 get_all_files_within_folder() here,我回答了与您类似的问题。它非常适合我。希望对您有所帮助。

        【讨论】:

          【解决方案5】:

          这是经典任务,可能在 Kernigan & Ritchie - The C 编程语言(第 8.6 章)中找到一个可能的解决方案。 任务的本质是递归遍历目标文件夹及其子文件夹。

          【讨论】:

          • 为什么这被否决了?答案在本书的这一章。我猜它被否决了,因为你必须先拥有一个副本? amazon.co.uk/C-Programming-Language-2nd/dp/0131103628 如果你正在学习 C,那非常值得购买。
          • @GaryWilloughby:这条裙子非常接近 K&R 2 显示其年龄的地方。章节中有一个可用的函数dirwalk()。几乎紧随其后,opendir()readdir()closedir() 的示例实现在任何当前的 Unix 系统上都没有用——但它曾经在 80 年代和 90 年代初工作。 (我不确定它何时停止工作;它部分取决于平台,但大多数 POSIX-ish O/S 已转移到“您必须使用我们的 opendir() 等,并且不能使用 K&R 2 中的任何更多”,比方说,2005 年,而且可能更早。)
          • 我说“dirwalk() 可用”。它需要一些小的调整才能使其可用于 POSIX 标准 opendir() 等。 Dirent的类型需要变成struct dirent(或者需要添加typedef struct dirent Dirent;),对dp-&gt;name的引用需要改为dp-&gt;d_name
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-02-27
          • 1970-01-01
          • 2015-10-05
          • 2013-12-14
          • 1970-01-01
          • 2011-01-15
          • 1970-01-01
          相关资源
          最近更新 更多