void getAllFiles( string path, vector<string>& files)
{
//文件句柄
long hFile = 0;
//文件信息
struct _finddata_t fileinfo; //很少用的文件信息读取结构
string p; //string类很有意思的一个赋值函数:assign(),有很多重载版本
if((hFile = _findfirst(p.assign(path).append("\\*").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) );
getFilesall( p.assign(path).append("\\").append(fileinfo.name), files );
}
}
else
{
files.push_back(p.assign(path).append("\\").append(fileinfo.name) );
}
}while(_findnext(hFile, &fileinfo) == 0); //寻找下一个,成功返回0,否则-1
_findclose(hFile);
}
}
该函数有两个参数,第一个为路径字符串(string类型,最好为绝对路径);第二个参数为文件夹与文件名称存储变量(vector类型,引用传递)。
结合Opencv 读取指定路径下的图片时,此时会产生程序中断。
进过一番摸索 参照了:opencv中samples\cpp\latentsvm_multidetect.cpp
代码如下:
void getFiles(const string& directoryName, vector<string>& filenames, bool addDirectoryName = true)
{
struct _finddata_t s_file;
string str = directoryName + "\\*.*";
intptr_t h_file = _findfirst(str.c_str(), &s_file);
if (h_file != static_cast<intptr_t>(-1.0))
{
do
{
if (addDirectoryName)
filenames.push_back(directoryName + "\\" + s_file.name);
else
filenames.push_back((string)s_file.name);
} while (_findnext(h_file, &s_file) == 0);
}
_findclose(h_file);
}