一个简单的扫描目录的程序

来源:互联网 发布:自己如何做淘宝店铺 编辑:程序博客网 时间:2024/05/19 17:08

这是一个简单的扫描目录并打印出来的程序,有点类似 tree命令。


#include<fcntl.h>#include<unistd.h>#include<stdio.h>#include<dirent.h>#include<string.h>#include<sys/types.h>#include<sys/stat.h>#include<stdlib.h>void scan_dir(char *dir, int depth){  DIR *dp;  struct dirent *entry;  struct stat statbuf;  if((dp = opendir(dir))==NULL){    puts("无法打开");    return;  }  chdir(dir);  while((entry=readdir(dp))!=NULL){    lstat(entry->d_name,&statbuf);    if(S_IFDIR & statbuf.st_mode){    if(strcmp(".",entry->d_name)==0||strcmp("..",entry->d_name)==0)       continue;    //注意%*s需要两个参数,第一个参数代表域宽,第二个代表输出的字符串,当域宽大于字符串长时,左补零,反之原样    //输出。类似printf("%*s%s","4","hello","world"),会把字符串4转换为整数,打印这么多空格,给人感觉是陷入了死循环    //其实,并不是。至于这个域宽到底是多少,经过我的测试,当域宽的值位2147483648*2时就会原样输出后面的字符串    printf("%*s%s/\n",depth,"",entry->d_name);    scan_dir(entry->d_name,depth+4);    }else{    printf("%*s%s\n",depth,"",entry->d_name);    }    }    chdir("..");    closedir(dp);}int main(void){   puts("扫描/home/xzy/test/hosts");   scan_dir("/home/xzy/test/hosts",0);   puts("扫描结束");   return 0;}

结果示例如下:



0 0
原创粉丝点击