DirectoryEntries Windows::listDirectory (const std::string& basedir, const std::string& subdir) { DirectoryEntries entities; std::string search(basedir + "\\"); int findhandle; struct _finddata_t findinfo; if (!subdir.empty()) { search.append(subdir).append("\\"); } else { search.append("*"); } findhandle = _findfirst(search.c_str(), &findinfo); if (findhandle == -1) return entities; do { if (findinfo.attrib & _A_SUBDIR) { if (strcmp(findinfo.name, ".") && strcmp(findinfo.name, "..")) { std::string newsubdirs; if (!subdir.empty()) newsubdirs.append(subdir).append("\\"); newsubdirs.append(findinfo.name); DirectoryEntries subDirEnts = listDirectory(basedir, newsubdirs); entities.insert(entities.end(), subDirEnts.begin(), subDirEnts.end()); } } else { std::string filename(subdir); if (!filename.empty()) filename.append("\\"); filename.append(findinfo.name); entities.push_back(filename); } } while (_findnext(findhandle, &findinfo) != -1); _findclose(findhandle); return entities; }