当前位置:  编程技术>c/c++/嵌入式

深入探讨:linux中遍历文件夹下的所有文件

    来源: 互联网  发布时间:2014-10-17

    本文导语:  linux C 遍历目录及其子目录 代码如下:#include   #include #include   #include   #include   #include   #include using namespace std;void listDir(char *path)  {          DIR              *pDir ;          struct dirent    *ent  ;          in...

linux C 遍历目录及其子目录
代码如下:

#include  
#include
#include  
#include  
#include  
#include  
#include
using namespace std;
void listDir(char *path) 

        DIR              *pDir ; 
        struct dirent    *ent  ; 
        int               i=0  ; 
        char              childpath[512]; 

        pDir=opendir(path); 
        memset(childpath,0,sizeof(childpath)); 

 
        while((ent=readdir(pDir))!=NULL) 
        { 

                if(ent->d_type & DT_DIR) 
                { 

                        if(strcmp(ent->d_name,".")==0 || strcmp(ent->d_name,"..")==0) 
                                continue; 

                        sprintf(childpath,"%s/%s",path,ent->d_name); 
                        printf("path:%s/n",childpath); 

                        listDir(childpath); 

                } 
else
{
coutd_name, &sb) >= 0 && S_ISDIR(sb.st_mode) && depth d_name, depth + 1);
        }
    }
    closedir(d);
    return 0;
}
int main()
{
    int depth = 1;
    int i;
    trave_dir("/usr/keygoe/ini/", depth);
    for(i = 0; i < len; i++)
    {
        printf("%st", filename[i]);
    }
    printf("n");
    return 0;
}

Linux下C语言遍历文件夹
学习了LINUX下用C语言遍历文件夹,一些心得
struct dirent中的几个成员:
d_type:4表示为目录,8表示为文件
d_reclen:16表示子目录或文件,24表示非子目录
经过本人亲自试验发现:d_reclen:16表示子目录或以.开头的隐藏文件,24表示普通文本文件,28为二进制文件,等等
d_name:目录或文件的名称
具体代码如下,仅供参考
代码如下:

#include
#include
#include
void List(char *path)
{
     struct dirent* ent = NULL;
     DIR *pDir;
     pDir=opendir(path);
     while (NULL != (ent=readdir(pDir)))
     {
         if (ent->d_reclen==24)
         {
             if (ent->d_type==8)
             {
                 printf("普通文件:%sn", ent->d_name);
             }
             else
             {
                 printf("子目录:%sn",ent->d_name);
                 List(ent->d_name);
                 printf("返回%sn",ent->d_name);
             }
         }
     }
}
int main(int argc, char *argv[])
{
      List(argv[1]);
      return 0;
}

上面函数修改后:
代码如下:

void List(char *path)
{
     printf("路径为[%s]n", path);

     struct dirent* ent = NULL;
     DIR *pDir;
     pDir=opendir(path);
     //d_reclen:16表示子目录或以.开头的隐藏文件,24表示普通文本文件,28为二进制文件,还有其他……
     while (NULL != (ent=readdir(pDir)))
     {
         printf("reclen=%d    type=%dt", ent->d_reclen, ent->d_type);
         if (ent->d_reclen==24)
         {   
             //d_type:4表示为目录,8表示为文件
             if (ent->d_type==8)
             {
                 printf("普通文件[%s]n", ent->d_name);
             }
         }
         else if(ent->d_reclen==16)
         {
             printf("[.]开头的子目录或隐藏文件[%s]n",ent->d_name);
         }
         else
         {
             printf("其他文件[%s]n", ent->d_name);
         }
     }
}

代码如下:

#include     
#include     
#include     
#include     

void dir_scan(char   *path,   char   *file);  
int count = 0;  

int main(int   argc,   char   *argv[])  
{  
                   struct   stat   s;  

                   if(argc   !=   2){  
                                   printf("one   direction   requriedn");  
                                   exit(1);  
                   }  
                   if(lstat(argv[1],   &s)   d_name,"..")==0) continue;
       if(stat(pdirent->d_name,&f_ftime)!=0) return -1 ;
       if(S_ISDIR(f_ftime.st_mode)) continue; /*子目录跳过*/
        fcnt++; 
       printf("文件:%sn",pdirent->d_name);
     }
     printf("文件总数%dn",fcnt);
      closedir(pdir);
     return 0;
}
#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)) {
                                  /**//* Found a directory, but ignore . and .. */
                                  if(strcmp( ". ",entry-> d_name) == 0 ||
                                              strcmp( ".. ",entry-> d_name) == 0)
                                              continue;
                                  printf( "%*s%s/n ",depth, " ",entry-> d_name);
                                  /**//* Recurse at a new indent level */
                                  printdir(entry-> d_name,depth+4);
                      }
                      else printf( "%*s%sn ",depth, " ",entry-> d_name);
          }
          chdir( ".. ");
          closedir(dp);
}

/**//*    Now we move onto the main function.    */

int main(int argc, char* argv[])
{
          char *topdir, pwd[2]= ". ";
          if (argc != 2)
                      topdir=pwd;
          else
                      topdir=argv[1];

          printf( "Directory scan of %sn ",topdir);
          printdir(topdir,0);
          printf( "done.n ");

          exit(0);
}


    
 
 

您可能感兴趣的文章:

  • Android中asset文件夹与raw文件夹的区别深入解析
  • CS:APP深入理解计算机系统练习题-【ELF文件的符号表相关】
  • 深入分析NTFS中文件被锁定导致Process.Start失败的详解
  • Android开发之文件操作模式深入理解
  • 深入解析Oracle参数及参数文件
  • 基于android中读取assets目录下a.txt文件并进行解析的深入分析
  • 深入C语言把文件读入字符串以及将字符串写入文件的解决方法
  • 深入分析C++中执行多个exe文件方法的批处理代码介绍
  • Android中使用PULL方式解析XML文件深入介绍
  • 深入分析java文件路径的详解
  • 解析VC中预编译头文件的深入分析
  • 函数中使用require_once问题深入探讨 优雅的配置文件定义方法推荐
  • 遍历文件系统目录树的深入理解
  • 基于JavaCore文件的深入分析
  • 深入AndroidManifest.xml文件解析详解
  • 先序遍历二叉树的递归实现与非递归实现深入解析
  • 深入遍历二叉树的各种操作详解(非递归遍历)
  • 深入理解二叉树的非递归遍历
  • 深入linux下遍历目录树的方法总结分析
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Docker支持更深入的容器日志分析
  • 关于《深入浅出MFC》
  • Linux有没有什么好的高级的书,我要深入,
  • 深入理解linux内核
  • [100分]有没有关于binutils的深入的资料?或者深入底层的资料?
  • 深入理解PHP内核 TIPI
  • 想深入学习Java应该学习哪些东西
  • 哪位有《JSP深入编程》电子版?
  • 想要深入学习LINUX该学什么?
  • 100分求:哪儿有《深入理解linux内核》可供下哉!
  • 如何深入Linux的内核学习?
  • U-BOOT得掌握到什么程序,用不用深入去学
  • 想深入了解操作系统该怎么做
  • 前一阵子学习了shell脚本,如果想深入点了解linux可以看什么书呢
  • 问一个《深入理解计算机系统》中的问题
  • 深入多线程之:深入分析Interlocked
  • ##想买书深入学习linux下的编程,请指教
  • 深入JDBC sqlserver连接写法的详解
  • 深入oracle特定信息排序的分析
  • 深入分析C中不安全的sprintf与strcpy
  • 哪儿有下载《深入理解Linux内核》这本书?(中文)


  • 站内导航:


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

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

    浙ICP备11055608号-3