总结几种遍历文件的方法:
第一种->自定义函数
void getAllFiles(string path, vector<string>& files, string format)
{
long long hFile = 0;//文件句柄 64位下long 改为 intptr_t
struct _finddata_t fileinfo;//文件信息
string p;
if ((hFile = _findfirst(p.assign(path).append(/*"\\*" + */"*"+format).c_str(), &fileinfo)) != -1)
//文件存在
{
do
{
if ((fileinfo.attrib & _A_SUBDIR))//判断是否为文件夹
{
if (strcmp(fileinfo.name, ".") != 0 && strcmp(fileinfo.name, "..") != 0)//文件夹名中不含"."和".."
{ files.push_back(p.assign(path).append("/").append(fileinfo.name)); //保存文件夹名
getAllFiles(p.assign(path).append("/").append(fileinfo.name), files,format); //递归遍历文件夹
}
}
else
{
files.push_back(p.assign(path).append("/").append(fileinfo.name));//如果不是文件夹,储存文件名
}
} while (_findnext(hFile, &fileinfo) == 0);
_findclose(hFile);
}
}
第二种:opencv函数
void glob(String pattern, std::vector<String>& result, bool recursive = false);
// example
vector<String> files;
glob(
"D:/Image/*.jpg"
, files,
true
);
当recursive为false时,仅仅遍历指定文件夹内符合模式的文件,当recursive为true时,会同时遍历指定文件夹的子文件夹