From 6e86eacf5aa6ba49f28c9d0f3c65f8ca3294b7f0 Mon Sep 17 00:00:00 2001 From: Gliniak Date: Sun, 12 Mar 2023 20:31:31 +0100 Subject: [PATCH] Added Listing directories and filtering filenames by regex --- src/xenia/base/filesystem.h | 4 ++++ src/xenia/base/filesystem_win.cc | 24 ++++++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/src/xenia/base/filesystem.h b/src/xenia/base/filesystem.h index cca30dd3f..d72cf4f3c 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(); diff --git a/src/xenia/base/filesystem_win.cc b/src/xenia/base/filesystem_win.cc index fb6edbb91..79a86d6b0 100644 --- a/src/xenia/base/filesystem_win.cc +++ b/src/xenia/base/filesystem_win.cc @@ -261,5 +261,29 @@ std::vector ListFiles(const std::filesystem::path& path) { return result; } +std::vector ListDirectories(const std::filesystem::path& path) { + std::vector files = ListFiles(path); + std::vector directories = {}; + + std::copy_if( + files.cbegin(), files.cend(), std::back_inserter(directories), + [](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](FileInfo file) { + return std::regex_match(file.name.filename().string(), + pattern); + }); + + return filtered_entries; +} + } // namespace filesystem } // namespace xe