Q如何在 C 程序中读取目录?
A查看是否可以使用opendir和readdir函数,这些函数是 POSIX 标准的一部分,在大多数 Unix 变体中都可用。MS-DOS、VMS 和其他系统也有实现。(MS-DOS 还有 FINDFIRST 和 FINDNEXT 例程,它们执行基本相同的功能,而 MS Windows 有FindFirstFile和FindNextFile.) 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 节