//返回.exe的文件名 void FindExeFile(std::string path, std::string mode, std::set<std::string> &saveExeFile) { _finddata_t file; intptr_t HANDLE; std::string pattern{ "(.*).exe" }; std::regex reg(pattern); std::string Onepath = path + mode; HANDLE = _findfirst(Onepath.c_str(), &file); if (HANDLE == -1L) { LOG_WARN << "can not match the folder path"; return; } do { //判断是否有子目录 if (file.attrib & _A_SUBDIR) { //判断是否为"."当前目录,".."上一层目录 if ((strcmp(file.name, ".") != 0) && (strcmp(file.name, "..") != 0)) { std::string newPath = path + "\" + file.name; FindExeFile(newPath, mode, saveExeFile); } } else { bool ret = std::regex_match(file.name, reg); //找到.exe文件 if (ret) { saveExeFile.insert(file.name); } } } while (_findnext(HANDLE, &file) == 0); _findclose(HANDLE); } //返回.exe所在的绝对路径 void FindExeFileWithPath(std::string path, std::string mode, std::set<std::string> &saveExeFile) { _finddata_t file; intptr_t HANDLE; std::string pattern{ "(.*).exe" }; std::regex reg(pattern); std::string Onepath = path + mode; HANDLE = _findfirst(Onepath.c_str(), &file); if (HANDLE == -1L) { return; } do { //判断是否有子目录 if (file.attrib & _A_SUBDIR) { //判断是否为"."当前目录,".."上一层目录 if ((strcmp(file.name, ".") != 0) && (strcmp(file.name, "..") != 0)) { std::string newPath = path + "\" + file.name; FindExeFile(newPath, mode, saveExeFile); } } else { bool ret = std::regex_match(file.name, reg); //找到.exe文件 if (ret) { saveExeFile.insert(path + "\" + file.name); } } } while (_findnext(HANDLE, &file) == 0); _findclose(HANDLE); } void main() { std::vector<std::string> exeFile; std::string path="C:\Windows"; std::mode="*\*"; FindExeFile(path, mode, exeFile); }