欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ubuntu遍历文件夹

程序员文章站 2022-05-20 10:34:32
...
/*
    函数名称:scanDir
    函数作用:遍历文件夹内容
    输入参数:const char* dir ,输入文件夹
    输出参数:vector<string>& 输出内容
    输入参数:int depth 遍历深度
    输入参数:bool bDirOrFile 输出是文件还是文件夹,true表示将文件夹也输出路径也输出,false表示只输出文件路径
    返回值:无
*/

void scanDir(const char *dir,std::vector<std::string>& arrJsonPath, int depth, bool bDirOrFile)
{
    DIR *dp;                           // 定义子目录流指针  
    struct dirent *entry;         // 定义dirent结构指针保存后续目录  
    struct stat statbuf;           // 定义statbuf结构保存文件属性  
    if((dp = opendir(dir)) == NULL) // 打开目录,获取子目录流指针,判断操作是否成功  
    {  
         puts("can't open dir.");  
         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; 
              std::string strFilePath = dir;                   //合并文件路径
              strFilePath += "/";
              strFilePath += entry->d_name;
              if(depth > 1)                                    //判断深度是否继续
                  scanDir(strFilePath.c_str(), arrJsonPath, depth-1, bDirOrFile);              // 递归调用自身,扫描下一级目录,但是我们只遍历当前目录下的所有json文件
              if(bDirOrFile)
              {
                  arrJsonPath.push_back(entry->d_name);
              }
         }  
         else  
         {
              //输出文件路径
              std::string strFilePath = dir;
              strFilePath += "/";
              strFilePath += entry->d_name;
              arrJsonPath.push_back(strFilePath);
         }
    }  
    //chdir("..");                                                  // 回到上级目录  
    closedir(dp);                                                 // 关闭子目录流
}


相关标签: c++ 便利文件夹