Chinaunix首页 | 论坛 | 博客
  • 博客访问: 812198
  • 博文数量: 92
  • 博客积分: 1498
  • 博客等级: 上尉
  • 技术积分: 993
  • 用 户 组: 普通用户
  • 注册时间: 2009-09-18 18:31
文章分类

全部博文(92)

文章存档

2013年(2)

2012年(3)

2011年(3)

2010年(61)

2009年(23)

分类: LINUX

2010-04-10 21:51:10

#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("..");回退到上一层目录,以继续打印目录清单。
阅读(1783) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~