我有一个文件夹的路径,例如:
/myfolder
或在Windows中:
C:\myfolder
我想获取该文件夹中所有文件的列表。我应该如何在C语言中实现呢?
在C++或C99中是否有区别?
如何获取其中文件夹的列表?
非常感谢任何帮助。
我有一个文件夹的路径,例如:
/myfolder
或在Windows中:
C:\myfolder
我想获取该文件夹中所有文件的列表。我应该如何在C语言中实现呢?
在C++或C99中是否有区别?
如何获取其中文件夹的列表?
非常感谢任何帮助。
您可以使用在 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;
}
在C++中,最好的方法是使用boost文件系统。
至于C语言,您需要使用平台API(POSIX/WinAPI)。
POSIX文档+示例:http://www.opengroup.org/onlinepubs/009695399/functions/readdir.html
dirwalk()
。几乎紧接着,就有一个 opendir()
、readdir()
和 closedir()
的示例实现,但在任何当前的 Unix 系统上都没有用处——但是在 80 年代和 90 年代初期这些曾经有效。我不确定它到底什么时候停止工作;这在一定程度上取决于平台,但大多数 POSIX-ish 操作系统已经转向了“您必须使用我们的 opendir()
等,不能再使用 K&R 2 中的版本”,比如说,在 2005 年左右或者更早的时候。 - Jonathan Lefflerdirwalk()
是可用的"。它需要进行一些小调整,以使其与 POSIX 标准的 opendir()
等一起使用。类型 Dirent
需要变成 struct dirent
(或者您需要添加 typedef struct dirent Dirent;
),并且对 dp->name
的引用需要更改为 dp->d_name
。 - Jonathan Leffler