diff --git a/src/xenia/base/filesystem.cc b/src/xenia/base/filesystem.cc index d7b7b647ded..e100260fc5e 100644 --- a/src/xenia/base/filesystem.cc +++ b/src/xenia/base/filesystem.cc @@ -24,5 +24,30 @@ bool CreateParentFolder(const std::filesystem::path& path) { return true; } +std::vector ListDirectories(const std::filesystem::path& path) { + const std::vector files = ListFiles(path); + std::vector directories = {}; + + std::copy_if(files.cbegin(), files.cend(), std::back_inserter(directories), + [](const FileInfo& file) { + return file.type == FileInfo::Type::kDirectory; + }); + + return directories; +} + +std::vector FilterByName(const std::vector& files, + const std::regex pattern) { + std::vector filtered_entries = {}; + + std::copy_if( + files.cbegin(), files.cend(), std::back_inserter(filtered_entries), + [pattern](const FileInfo& file) { + return std::regex_match(file.name.filename().string(), pattern); + }); + + return filtered_entries; +} + } // namespace filesystem } // namespace xe diff --git a/src/xenia/base/filesystem.h b/src/xenia/base/filesystem.h index cca30dd3ff3..d72cf4f3cb6 100644 --- a/src/xenia/base/filesystem.h +++ b/src/xenia/base/filesystem.h @@ -13,6 +13,7 @@ #include #include #include +#include #include #include #include @@ -123,6 +124,9 @@ struct FileInfo { }; bool GetInfo(const std::filesystem::path& path, FileInfo* out_info); std::vector ListFiles(const std::filesystem::path& path); +std::vector ListDirectories(const std::filesystem::path& path); +std::vector FilterByName(const std::vector& files, + const std::regex pattern); #if XE_PLATFORM_ANDROID void AndroidInitialize();