prev up next   top/contents search

comp.lang.c FAQ 列表· 问题 19.20

Q如何在 C 程序中读取目录?


A查看是否可以使用opendirreaddir函数,这些函数是 POSIX 标准的一部分,在大多数 Unix 变体中都可用。MS-DOS、VMS 和其他系统也有实现。(MS-DOS 还有 FINDFIRST 和 FINDNEXT 例程,它们执行基本相同的功能,而 MS Windows 有FindFirstFileFindNextFile.) readdir仅返回文件名;如果您需要有关文件的更多信息,请尝试调用stat。要将文件名与某些通配符模式匹配,请参阅问题 13.7

这里有一个小例子,列出了当前目录中的文件

#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>

main()
{
	struct dirent *dp;
	DIR *dfd = opendir(".");
	if(dfd != NULL) {
		while((dp = readdir(dfd)) != NULL)
			printf("%s\n", dp->d_name);
		closedir(dfd);
	}
	return 0;
}
(在旧系统上,头文件#include可能是<direct.h><dir.h>,并且由readdir返回的指针struct direct *。此示例假定"."是当前目录的同义词。)

在万不得已的情况下,您可以使用popen(请参阅问题 19.30)来调用操作系统列目录程序,并读取其输出。(如果您只需要向用户显示文件名,您可能可以使用system;请参阅问题 19.27。)

参考资料:K&R2 第 8.6 节 pp. 179-184
PCS 第 13 节 pp. 230-1
POSIX 第 5.1 节
Schumacher, ed., C 语言软件解决方案 第 8 节


prev up next   contents search
关于此 FAQ 列表   关于 Eskimo   搜索   反馈   版权

Eskimo North 托管