OpenCV获取文件夹下所有文件名

时间:2022-09-13 22:11:10

一、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);
}