当前位置:  技术问答>linux和unix

求助:遍历目录

    来源: 互联网  发布时间:2016-06-22

    本文导语:  #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...

#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: %sn", 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()
{
    printf("Directory scan of /home:n");
    printdir("/home",0);
    printf("done.n");

    exit(0);
}
这个程序是遍历/home目录及其子目录下的所有文件
为什么要进入子目录才可以呢?原因何在?


|
   你从程序的执行结果就可以看出来,语句printf("%*s%s/n", depth,"",entry->d_name); 打印的仅仅是目录或文件的

名称(例如/home下的jackzhou,neil这样的目录名),并不包括它的绝对路径,这说明d_name这个char[]中存放的只是这

个目录或文件的名称。那递归调用printdir(entry->d_name, depth+4); 进入的就是jackzhou这样的目录了,相当于printdir("jackzhou", depth+4)调用。如果你没有事先的语句chdir(dir)切换到/home下,以及递归完一次后用chdir("..")切回上层目录,那这个jackzhou当然只能从当前工作目录下找了,找不到的话当然就会出错了。

|
opendir()的参数要是绝对路径,如果不是的话,他会在现在的工作目录搜索相应的d_name文件。
所以如果不chdir改变工作目录,原本文件名是“/home/usrname/”就会变成“usrname/”,所以打不开文件。

|
嗯如果没有chdir的话,将遍历的是整个/目录下的所有的文件。

|
jinwei1984
   你打不开/home,可能是因为权限问题吧。不过我比较奇怪,一般/home都是可读的。

zhoudaxia正解,chdir是因为递归的关系。

    
 
 

您可能感兴趣的文章:

  • 求助大家帮忙编写linux遍历进程程序
  • 求助 如何遍历一个文件的内容?并且将结果中 第一列名字相同的内容的各个字段做相加工作
  • 求助,遍历目录中所有文件的代码分析
  • [求助]请问怎样把/下除了/mnt外的其它目录(包括子目录及文件)复制到/mnt中?
  • 求助:如何列出某个目录下面的所有子目录以及文件的详细信息?
  • 求助,linux中修改了目录dir下的某个文件,相应的dir属性中的时间会与修改目录下文件的时间一致,这是怎么实现的?
  • 紧急求助:怎么获取一个目录中的所有目录和文件名?
  • 求助shell 如何判断目录是否空,或者不为空?
  • 求助~~急~如何删除指定目录下的文件夹???(不是文件)
  • 紧急,目录访问权限问题求助,请大侠指教,先写了!
  • 菜鸟求助:linux虚拟机无法mount主机目录
  • 目录共享问题求助!
  • 求助,无法删除某个目录
  • gcc编译时出错,gcc: installation problem, cannot exec `as': 没有那个文件或目录!!!求助呀呀!!!!!
  • 求助~~~如何统计目录大小~~~
  • 新人求助:请问安装Red Hat9时,所选软件包安装到哪个目录了?
  • 用户目录权限问题 求助!在线等!
  • [求助]solaris下grep如何实现递归地查找某目录下的文件。
  • 在linux中,想查询/proc文件中的某个目录是否存在,求助如何进行检测
  • 我用rpm命令刚刚装了jdk1.42,但是不知道jdk装到哪个目录下去了,只好来求助于大家了。
  • 求助,如何增加fc4的根目录分区容量??
  • 求助:Unix文件系统目录文件
  • [求助]这个目录下的文件,如何执行啊??
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 高分求助高分求助高分求助高分求助高分求助高分求助
  • 怎样读取HZK24S前十区的内容啊???求助求助
  • 紧急求助!紧急求助!
  • 【求助】iplanet问题,求助高手解答!
  • 菜鸟求助,solaris下计算问题求助
  • 【求助】SOS紧急求助..............极为简单的问题...跪求....
  • 高分求助啊!求助SUSE 10.0 不能上网.
  • 急急急急急急急啊,紧急求助啊!!!!!满分求助啊!!!!!!
  • 求助:linux下 vim的配置(高分求助)
  • red hat怎么安装gcc啊!总是出错,求助求助啊!!!yum源怎么改啊!!
  • 求助~~求助 ~~linux文件读写问题
  • 求助:信号 --13 进程中断
  • 求助,安装了红帽子后进不了
  • 新装linux求助
  • linux的 iptables问题求助
  • (高分求助)请问,那里有软件开发的<设计文档>
  • 一个简单的问题,高分求助!!!
  • 紧急求助:Unix下给文件夹重命名用什么命令?谢谢!!!!
  • VJ的一个问题,高分求助,熟悉VJ得请进!
  • 高分求助


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3