/* 功能:演示了在Linux下利用C语言递归遍历指定目录下的子目录(不含隐藏目录)和文件 */ #include <stdio.h> #include <dirent.h> #include <string.h> void List(char *path) { struct dirent *ent = NULL; DIR *pDir; if((pDir = opendir(path)) != NULL) { while(NULL != (ent = readdir(pDir))) { if(ent->d_type == 8) // d_type:8-文件,4-目录 printf("File:\t%s\n", ent->d_name); else if(ent->d_name[0] != '.') { printf("\n[Dir]:\t%s\n", ent->d_name); List(ent->d_name); // 递归遍历子目录 printf("返回[%s]\n\n", ent->d_name); } } closedir(pDir); } else printf("Open Dir-[%s] failed.\n", path); } int main() { char path[] = "/home/zcm/program/test"; List(path); return 0; }
程序运行结果:
File: travel.c File: p1.c File: 20111012.log [Dir]: test File: temp.txt File: b.c File: convert2.sh File: d.txt File: a.c File: d.c File: convert1.sh File: tst.c File: test.sh 返回[test] [Dir]: whatdir File: a1.c File: a2.c 返回[whatdir] File: p1 File: travel File: a.sh File: 20111005.log File: travel.cpp File: p0 File: wht.log File: 2011ty12.log File: p2 File: 20111120.log File: p2.c File: whatarey.log File: 20011008.log File: 20111006.log File: p0.c