使用C语言获取文件夹中文件列表

5

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

/myfolder

或在Windows中:

C:\myfolder

我想获取该文件夹中所有文件的列表。我应该如何在C语言中实现呢?

在C++或C99中是否有区别?

如何获取其中文件夹的列表?

非常感谢任何帮助。


2
这个问题与C或C++无关,而与您使用的操作系统有关。请更加精确。 - Jens Gustedt
@Jens 嗯?你在哪里看到了歧义?而且这与C或C++有很大关系。 - Šimon Tóth
3
C语言可以进行文件IO操作,但是它不了解目录的概念。目录是操作系统的概念,因此要回答这个问题并提供有用的信息,您需要了解所使用的操作系统。 - Jens Gustedt
5个回答

4

您可以使用在 dirent.h 中声明的函数。

dirent.h 是 C 语言 POSIX 库中的头文件,包含了方便遍历目录的结构。该函数并非 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;
}

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

对于任何正在搜索的人,该页面虽然现在已经关闭,但可以在wayback机器上找到。https://web.archive.org/web/20190717230650/http://www.two-sdg.demon.co.uk/curbralan/code/dirent/dirent.c - Charles Lohr

2

1

请查看我在C/C++中编写的get_all_files_within_folder()这里,我回答了一个类似于你的问题。它对我来说完美地运行。希望它能够帮到你。


0
这是一个经典的任务,可能可以在 Kernigan & Ritchie 的《C程序设计语言》(第8.6章)中找到其中一个解决方案。任务的核心是递归遍历目标文件夹及其子文件夹。

为什么这个被踩了?答案确实在这本书的这一章节中。我猜它被踩是因为你首先必须拥有一份副本?http://www.amazon.co.uk/C-Programming-Language-2nd/dp/0131103628 如果你正在学习C语言,购买这本书绝对值得。 - Gary Willoughby
@GaryWilloughby 这很接近 K&R 2 显示其年龄的地方。第章中有一个可用的函数 dirwalk()。几乎紧接着,就有一个 opendir()readdir()closedir() 的示例实现,但在任何当前的 Unix 系统上都没有用处——但是在 80 年代和 90 年代初期这些曾经有效。我不确定它到底什么时候停止工作;这在一定程度上取决于平台,但大多数 POSIX-ish 操作系统已经转向了“您必须使用我们的 opendir() 等,不能再使用 K&R 2 中的版本”,比如说,在 2005 年左右或者更早的时候。 - Jonathan Leffler
我说过 "dirwalk() 是可用的"。它需要进行一些小调整,以使其与 POSIX 标准的 opendir() 等一起使用。类型 Dirent 需要变成 struct dirent(或者您需要添加 typedef struct dirent Dirent;),并且对 dp->name 的引用需要更改为 dp->d_name - Jonathan Leffler

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