void et::findSubfolders(const std::string& folder, bool recursive, StringList& list) { StringList folderList; ET_STRING_TYPE normalizedFolder = ET_STRING_TO_PARAM_TYPE(addTrailingSlash(folder)); ET_STRING_TYPE foldersSearchPath = normalizedFolder + allFilesMask; WIN32_FIND_DATA folders = { }; HANDLE folderSearch = FindFirstFile(foldersSearchPath.c_str(), &folders); if (folderSearch != INVALID_HANDLE_VALUE) { do { ET_STRING_TYPE name(folders.cFileName); bool isFolder = (folders.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY; if (isFolder && (name != currentFolder) && (name != previousFolder)) { folderList.push_back(ET_STRING_TO_OUTPUT_TYPE(normalizedFolder + name + ET_STRING_FROM_CONST_CHAR("\\"))); } } while (FindNextFile(folderSearch, &folders)); FindClose(folderSearch); } if (recursive) { for (const std::string& i : folderList) findSubfolders(i, true, list); } list.insert(list.end(), folderList.begin(), folderList.end()); }
void et::findSubfolders(const std::string& folder, bool recursive, StringList& list) { std::string normalizedFolder = addTrailingSlash(folder); std::string foldersSearchPath = normalizedFolder + "*.*"; StringList folderList; WIN32_FIND_DATA folders = { }; HANDLE folderSearch = FindFirstFile(foldersSearchPath.c_str(), &folders); if (folderSearch != INVALID_HANDLE_VALUE) { do { if (strcmp(folders.cFileName, ".") && strcmp(folders.cFileName, "..") && ((folders.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY)) { std::string folderName(folders.cFileName); folderList.push_back(normalizedFolder + folderName + "\\"); } } while (FindNextFile(folderSearch, &folders)); FindClose(folderSearch); } if (recursive) { for (const std::string& i : folderList) findSubfolders(i, true, list); } list.insert(list.end(), folderList.begin(), folderList.end()); }