0

有没有人使用 FindFirstFile 函数扫描多个相同类型的文件?

int main(int argc, char** argv){
if(argc != 3)
{
 cout <<" Usage: Run [dir of images folder] [file format]" << endl;
 cout <<" Example: Run \\imgs\\\\ .jpg " << endl;
 return 0;
}


WIN32_FIND_DATA FindFileData;
HANDLE hFind;

string dir = argv[1];   // store user input dir
string type = argv[2];  // store user input file type
stringstream sst;
sst << dir << "*" << type;
string folderDir = sst.str();
sst.str("");
cout << "Scanning all " << type << " files in "<< dir << endl;
cout << folderDir << endl;

/* LOADING IMAGES IN FOLDER */

我尝试了 folderDir.c_str() 而不是 "\imgs\*.jpg" 但我不能让它工作;

hFind = FindFirstFile("\imgs\\*.jpg", &FindFileData);   //images must be in .vcxproj dir
    if (hFind != INVALID_HANDLE_VALUE){
        int i = 0;
        do {    
            char loc[50] = "\imgs\\";   // Obvsly, I couldn't assign argv[1] here
            images.push_back(imread(strcat(loc,FindFileData.cFileName)));   //pushes images into vector
            img_fname[i] = FindFileData.cFileName;          // stores file names into string array
            cout << "Successfully loaded " << FindFileData.cFileName << endl;   //prints loaded file names
            i++;
        }while(FindNextFile(hFind, &FindFileData));
    }

另外,我可以请求帮助分配string dirchar loc[50] = "\imgs\\";吗?如果只有 char loc[50] = dir; 有可能...

我在实例化 loc 后尝试过strcpy(loc, dir.c_str());,但它仍然失败。在未知函数中给了我一个错误(无法识别或不支持的数组类型)

4

1 回答 1

1
i think, it should be only one backslash there: 
"imgs\*.jpg" instead of "\imgs\\*.jpg".

this works fine for me ( and gives me the filelist ):

std::vector<std::string> readdir( const char * dmask ) 
{
    std::vector<std::string> vec;
    HANDLE hFind;
    WIN32_FIND_DATA FindFileData;
    if ((hFind = FindFirstFile(dmask, &FindFileData)) != INVALID_HANDLE_VALUE)
    {
        do {
            vec.push_back( FindFileData.cFileName );
        } while(FindNextFile(hFind, &FindFileData));
        FindClose(hFind);
    }
    return vec;
}

std::vector<std::string> files = readdir("imgs\*.jpg");
于 2013-02-10T09:25:58.587 回答