一、OpenCV中有实现遍历文件夹下所有文件的类Directory,它里面包括3个成员函数:(1)、GetListFiles:遍历指定文件夹下的所有文件,不包括指定文件夹内的文件夹;(2)、GetListFolders:遍历指定文件夹下的所有文件夹,不包括指定文件夹下的文件;(3)、GetListFilesR:遍历指定文件夹下的所有文件,包括指定文件夹内的文件夹。
若要使用Directory类,则需包含contrib.hpp头文件,此类的实现在contrib模块。
string path1 = "E:\\代码转化\\synopsis\\坐标信息2"
string exten1 = "*.txt";
bool addPath1 = false;
vector<string> filenames = dir.GetListFiles(path1, exten1, addPath1);
注:这样获得的 filenames中,只存储 文件夹 path1 下的文件名,不是全部路径;
下面的代码可以获得 path1 下的文件的完整的路径 ;
但是两者存储的顺序都很奇怪:例如path1下有12个txt文件,则输出后的顺序都是:1.txt,10.txt,11.txt,12.txt,2.txt,3.txt等等
二、
void GetAllFileInfo(char* path, vector<char*> &filesPathVector)
{
//find the first file
_tfinddata_t c_file;
intptr_t hFile;
char root[MAX_PATH];
strcpy(root,path);
strcat(root,"\\*.*");
hFile=_tfindfirst(CA2CT(root),&c_file);
if( hFile == -1)
return;
//search all files recursively.
do
{
if(_tcslen(c_file.name)==1&&c_file.name[0]==_T('.')
||_tcslen(c_file.name)==2&&c_file.name[0]==_T('.')&&c_file.name[1]==_T('.'))
continue;
char* fullPath=new char[MAX_PATH];
strcpy(fullPath,path);
strcat(fullPath,"\\");
char* name=(char*)malloc(2*wcslen(c_file.name)+1);
wcstombs(name,c_file.name,2*wcslen(c_file.name)+1);
strcat(fullPath,name);
if(c_file.attrib&_A_SUBDIR)
{
GetAllFileInfo(fullPath,filesPathVector);
}
else
{
//store full file path in vector.
//char pr=*fullPath;
filesPathVector.push_back(fullPath);
//print file info
}
}
while( _tfindnext( hFile, &c_file ) == 0);
//close search handle
_findclose(hFile);
}