Code: Select all
void FindDirectoriesInDirectory(irr::io::IFileSystem* FileSystem, std::vector<const irr::io::path>& Directories, const irr::io::path Directory)
{
const irr::io::path OriginalWorkingDirectory = FileSystem->getWorkingDirectory();
//
// Change working directory to search path
FileSystem->changeWorkingDirectoryTo(Directory);
//
// Get all files and folders in working directory
irr::io::IFileList* Files = FileSystem->createFileList();
//
// Set back the original working directory
FileSystem->changeWorkingDirectoryTo(OriginalWorkingDirectory);
//
// Loop through all found files and folders
for (unsigned int i = 0; i < Files->getFileCount(); i++)
{
//
// Make sure were looking at a directory
if (Files->isDirectory(i))
{
//
// Skip 'current level' and 'jump level' wildcards
if (Files->getFileName(i) == "." || Files->getFileName(i) == "..") { continue; }
//
// Add the trailing forward slash onto the path
const irr::io::path FoundDirectory = Files->getFullFileName(i) + "/";
//
// Add newly found directory to vector
Directories.push_back(FoundDirectory);
//
// Search again through our newly found directory for more directories
FindDirectoriesInDirectory(FileSystem, Directories, FoundDirectory);
}
}
//
// Drop the IFileList
Files->drop();
}
//
//
// Useage
//
irr::io::IFileSystem* FS = Infinity::Graphics::GetDevice()->getFileSystem();
std::vector<const irr::io::path> SearchDirectories;
FindDirectoriesInDirectory(FS, SearchDirectories, "./Models");
for (auto Dir : SearchDirectories)
{
std::cout << Dir.c_str() << std::endl;
}