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); // 关闭子目录流
}
上一篇: 谁是谷歌想要的人才?
下一篇: Java集合HashSet基本使用详解