1
1楼 zhouyongfei 2010-04-10 #include <unistd.h>
#include <stdio.h> #include <dirent.h> #include <string.h> #include <sys/stat.h> #include <stdlib.h> void printdir(char *dir,int depth) { DIR *dp; struct dirent *entry; struct stat statbuf; if((dp = opendir(dir)) == NULL){ fprintf(stderr,"cannot open directory: %s\n",dir); return ; } chdir(dir); while((entry = readdir(dp)) != NULL){ lstat(entry -> d_name,&statbuf); if(S_ISDIR(statbuf.st_mode)){ if(strcmp(".",entry -> d_name) == 0 || strcmp("..",entry -> d_name) == 0) continue; printf("%*s%s/\n",depth,"",entry -> d_name); printdir(entry -> d_name,depth+4); }else printf("%*s%s\n",depth,"",entry -> d_name); } chdir(".."); closedir(dp); } int main(int argc,char** argv) { char *topdir = "."; if(argc >= 2){ topdir = argv[1]; } printf("Directory scan of %s\n",topdir); printdir(topdir,0); printf("done.\n"); exit(0); } 首先,贴出我的代码,是根据书上的改编而成,可以实现指定目录的树状打印,实现过成不是特别复杂。 相信大多数人都能看懂上面这个函数,主要功能在printdir()函数里实现。这里着重说明这个函数吧。 首先,检查指定的目录是否存在,如果存在,调用chdir进入指定目录,如果readdir函数返回空值,程序就 检查是否为目录项。如果不是,就根据depth的值缩进打印 如果是一个目录,就递归遍历,跳过“.” “..”后,printdir函数调用自己并在此进入一个同样的处理过程, 一次while完成后,chdir("..");回退到上一层目录,以继续打印目录清单。
搜索墙@2009 www.pkwall.com all rights reserved QQ:276471788 [京ICP备09111534号]
声明:本站部分数据来源于网络,仅供参考,如有版权问题,请联系我们,我们将及时删除!转载本站请注明来源
| ||||||||||||||||||||||||||||||||||||||||||||