1、获取文件夹中(包括其子文件夹)特定后缀文件的绝对路径
以jpg和png为例
#include <io.h>
vector<string> getFilesList(string dir)
{
vector<string> allPath;
// 在目录后面加上"\\*.*"进行第一次搜索
string dir2 = dir + "\\*.*";
intptr_t handle;
_finddata_t findData;
handle = _findfirst(dir2.c_str(), &findData);
if (handle == -1) {// 检查是否成功
cout << "can not found the file ... " << endl;
}
while (_findnext(handle, &findData) == 0)
{
if (findData.attrib & _A_SUBDIR) //是否含有子目录
{
//若该子目录为"."或"..",则进行下一次循环,否则输出子目录名,并进入下一次搜索
if (strcmp(findData.name, ".") == 0 || strcmp(findData.name, "..") == 0)
continue;
// 在目录后面加上"\\"和搜索到的目录名进行下一次搜索
string dirNew = dir + "\\" + findData.name;
vector<string> tempPath = getFilesList(dirNew);
for (string x:tempPath)
{
if (x.substr(x.find_last_of('.') + 1) == "jpg" || "png") //判断文件后缀是否如需求相似
{
allPath.push_back(x);
}
}
}
else //不是子目录,即是文件
{
string dirNew = findData.name;
string suffix_str = dirNew.substr(dirNew.find_last_of('.') + 1);
if (suffix_str == "jpg" || "png")
{
allPath.push_back(dir + "\\" + findData.name);
}
}
}
_findclose(handle); // 关闭搜索句柄
return allPath;
}
2、获取文件夹中子文件夹的绝对路径
vector<string> getFilesList(string dir)
{
vector<string> allPath;
// 在目录后面加上"\\*.*"进行第一次搜索
string dir2 = dir + "\\*.*";
intptr_t handle;
_finddata_t findData;
handle = _findfirst(dir2.c_str(), &findData);
if (handle == -1) {// 检查是否成功
cout << "can not found the file ... " << endl;
}
while (_findnext(handle, &findData) == 0)
{
if (findData.attrib & _A_SUBDIR) //是否含有子目录
{
//若该子目录为"."或"..",则进行下一次循环,否则输出子目录名,并进入下一次搜索
if (strcmp(findData.name, ".") == 0 || strcmp(findData.name, "..") == 0)
continue;
// 在目录后面加上"\\"和搜索到的目录名进行下一次搜索
string dirNew = dir + "\\" + findData.name; //子文件夹路径
allPath.push_back(dirNew );
}
else //不是子目录,即是文件,不做处理
{
}
}
_findclose(handle); // 关闭搜索句柄
return allPath;
}