文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>目录结构的树状打印 -目录相关操作

目录结构的树状打印 -目录相关操作

时间:2010-04-10  来源:wwwzyf

#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("..");回退到上一层目录,以继续打印目录清单。
相关阅读 更多 +
排行榜 更多 +
百炼英雄抽卡技巧指南

百炼英雄抽卡技巧指南

休闲益智 下载
英雄没有闪滚雷旋风技能如何搭配

英雄没有闪滚雷旋风技能如何搭配

休闲益智 下载
英雄没有闪雷旋风BD构筑推荐

英雄没有闪雷旋风BD构筑推荐

休闲益智 下载