DirectoryEntries FileSystem::listDirectory (const std::string& basedir, const std::string& subdir) const { #if DIRLIST_NOT_SUPPORTED return Singleton<GameRegistry>::getInstance().getGame()->listDirectory(basedir, subdir); #else DirectoryEntries entriesAll; const std::string sysWritePath = getAbsoluteWritePath() + basedir; if (!sysWritePath.empty()) entriesAll = System.listDirectory(sysWritePath, subdir); const std::string dataDir = getDataDir() + basedir; const DirectoryEntries entries = System.listDirectory(dataDir, subdir); for (const std::string& entry : entries) { entriesAll.push_back(entry); } std::sort(entriesAll.begin(), entriesAll.end()); entriesAll.erase(std::unique(entriesAll.begin(), entriesAll.end()), entriesAll.end()); return entriesAll; #endif }
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; }
DirectoryEntries FileSystem::listDirectory (const std::string& basedir, const std::string& subdir) { DirectoryEntries entriesAll; // TODO: register this in the app #if DIRLIST_NOT_SUPPORTED #include "dir.h" #endif const std::string sysWritePath = getAbsoluteWritePath() + basedir; if (!sysWritePath.empty()) entriesAll = System.listDirectory(sysWritePath, subdir); const std::string dataDir = getDataDir() + basedir; const DirectoryEntries entries = System.listDirectory(dataDir, subdir); for (DirectoryEntriesIter i = entries.begin(); i != entries.end(); ++i) { entriesAll.push_back(*i); } std::sort(entriesAll.begin(), entriesAll.end()); entriesAll.erase(std::unique(entriesAll.begin(), entriesAll.end()), entriesAll.end()); return entriesAll; }