1. 遍历目标路径下的所有子文件及文件
函数定义:vector<SubfolderInfo> listFiles(const char * dir, bool flag = false);
函数功能:递归遍历指定目录下所有子文件夹,文件夹信息保存至结构体SubfolderInfo
中,最终返回一个vector<SubfolderInfo>
,其中包含指定目录下所有子目录的信息
传入参数:
const char* dir
:目标路径bool flag
:是否清空函数中的static变量,第二次及以后调用时需为true
返回示例:
#include <iostream>
#include <io.h>
using namespace std;
struct SubfolderInfo
{
string folder_name; //存放该子目录名称
vector<string> file_names; //存放该子目录下的文件名称
};
vector<SubfolderInfo> listFiles(const char * dir, bool flag = false)
{
char dirNew[200];
strcpy_s(dirNew, dir);
strcat_s(dirNew, "\\*.*"); // 在目录后面加上"\\*.*"进行第一次搜索
static vector<SubfolderInfo> sub_dirs; //加static防止该变量被优化掉导致内存错误
static size_t folder_counter = 0;
if (flag)
{
sub_dirs.clear();
folder_counter = 0;
}
intptr_t handle;
_finddata_t findData;
handle = _findfirst(dirNew, &findData);
if (handle == -1) // 检查是否成功
return sub_dirs;
do
{
SubfolderInfo subfolder;
if (findData.attrib & _A_SUBDIR) //子文件夹
{
if (strcmp(findData.name, ".") == 0 || strcmp(findData.name, "..") == 0) //过滤.和..文件夹
continue;
//cout << findData.name << "\t<dir>\n";
subfolder.folder_name = string(findData.name);
folder_counter++;
sub_dirs.push_back(subfolder);
// 在目录后面加上"\\"和搜索到的目录名进行下一次搜索
strcpy_s(dirNew, dir);
strcat_s(dirNew, "\\"); //后加"\\"
strcat_s(dirNew, findData.name);
listFiles(dirNew);
}
else