// usage std::vector exts{".jpg", ".png"}; std::vector files = getFilesInDir("/path/to/root/directory/", exts, true); // -------------------------------------------------------- #define BOOST_FILESYSTEM_NO_DEPRECATED #include /** * @note If extension is empty string ("") then all files are returned * @param Path root directory * @param extension String or vector of strings to filter - empty string returns all files - default: "" * @param recursive Set true to scan directories recursively - default false * @return Vector of strings with full paths */ std::vector getFilesInDir(const std::string &path, const std::string &extension="", const bool &recursive=false){ std::vector files; boost::filesystem::path dir(path); if(boost::filesystem::exists(path) && boost::filesystem::is_directory(path)){ if(recursive){ boost::filesystem::recursive_directory_iterator it(path); boost::filesystem::recursive_directory_iterator endit; while (it != endit) { if(boost::filesystem::is_regular_file(*it) && (extension=="")?true:it->path().extension() == extension) { files.push_back(it->path().string()); } ++it; } } else { boost::filesystem::directory_iterator it(path); boost::filesystem::directory_iterator endit; while (it != endit) { if(boost::filesystem::is_regular_file(*it) && (extension=="")?true:it->path().extension() == extension) { files.push_back(it->path().string()); } ++it; } } } return files; } std::vector getFilesInDir(const std::string &path, const std::vector &extension, const bool &recursive=false){ if(extension.size() <=0) return getFilesInDir(path, "", recursive); std::vector outArray; for (const std::string &ext: extension){ std::vector files = getFilesInDir(path, ext, recursive); outArray.insert(outArray.end(), files.begin(), files.end()); } return outArray; }