搜索墙首页  编程技术  java  asp  ajax  php  c/c#/c++  数据库  oracle  mysql  db2  操作系统  windows  linux  股吧
首页 > 操作系统 > linux
 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("..");回退到上一层目录,以继续打印目录清单。
 1         
您的发言将按有关规定都会存档,您须为所发表后果负责,请您遵纪守法并注意语言文明。
标题:目录结构的树状打印 -目录相关操作
热门关注
标题回复点击
d7se77dy/77dy电影. 77dy是77dy宽频和77dy1331673
黄网最新地址0903
IPP2P模块修改版,最新0.99.16440828
zeh 4.p patch on RHEL 30744
将 Puppy Linux 4.00 安装在U盘里 打造随身系统2695
Apache 超全0689
gcc glibc kernel 版本兼容性 reference0684
[保留]7667
d7se77dy/77dy电影. 77dy是77dy宽频和77dy156650
linux 有啥低级格式化硬盘的软件1644
搜索墙@2009 www.pkwall.com all rights reserved QQ:276471788 [京ICP备09111534号]
声明:本站部分数据来源于网络,仅供参考,如有版权问题,请联系我们,我们将及时删除!转载本站请注明来源