zoukankan      html  css  js  c++  java
  • Linux C 遍历指定目录

    #include<stdio.h>    //标准输入输出
    #include<unistd.h>   //各种系统调用
    #include<dirent.h>   //与目录有关的操作
    #include<string.h>   //与字符串处理有关的函数
    #include<sys/stat.h> //与文件状态有关
    #include<sys/types.h>//linux系统自定义的类型
    
    
    
    void show_directory(char * dir_name,int level);
    int main(int argc, char * argv[])
    {
        if(argc != 2)
        {
            fprintf(stdout,"%s
    ","参数输入有问题!");
            return 1;
        }
        show_directory(argv[1],0);
        return 0;
        
    }
    
    /*用于显示目录
     * 第一个参数为目录的名称
     * 第二个参数为目录为几及目录
     * */
    
    void show_directory(char * dir_name,int level)
    {
        DIR * dir; //目录流指针
        struct dirent * entry; //目录项结构体指针
        struct stat statbuf;
        
    
    
        if( (  dir =  opendir(dir_name) ) ==  NULL    )
            return ; 
        
        chdir(dir_name);
    
        char cwd[100];
        getcwd(cwd,100);
    
        int dir_name_len;
        dir_name_len = strlen(dir_name);
        fprintf(stdout,"%*s文件夹中:
    ",level + dir_name_len,dir_name);
        while( ( entry = readdir(dir) ) !=  NULL )
        {
            
            lstat(entry->d_name,&statbuf);
            //如果是目录,就第归调用    
            if( S_ISDIR (statbuf.st_mode)  )
            {
                if(   strcmp(".",entry->d_name) == 0 || strcmp("..",entry->d_name) == 0)
                {
                    continue;
                }
                int level2;
                level2 = level + dir_name_len + 10;  //计算出空格数
                show_directory(entry->d_name,level2);
            }
            else if(  S_ISREG(statbuf.st_mode)  )  //如果是文件,输出
            {
                int length = level + (int)strlen(entry->d_name) + dir_name_len + 10; //子段应有占的长度
                fprintf(stdout,"%*s
    ",level + (int)strlen(entry->d_name) + dir_name_len + 10,entry->d_name);
            }
        }
        chdir("..");
        closedir(dir);
    
    }
  • 相关阅读:
    call 与 apply
    react-router
    阻止IOS上的弹性滚动
    React规范
    sessionStorage 、localStorage 和 cookie 对比区分
    显式Intent 和隐式 Intent 的区别
    Activity之间传递数据的方式及常见问题总结
    Android横竖屏切换生命周期变化
    String、StringBuilder、StringBuffer 区别
    内存泄漏
  • 原文地址:https://www.cnblogs.com/qingergege/p/6494245.html
Copyright © 2011-2022 走看看