#include
#include
#include
#include
#include
#include
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("..");回退到上一层目录,以继续打印目录清单。
阅读(1843) | 评论(0) | 转发(0) |