Skip to content

Commit c4b6651

Browse files
committed
[Base] Added Listing directories and filtering filenames by regex
1 parent f357f26 commit c4b6651

File tree

2 files changed

+28
-0
lines changed

2 files changed

+28
-0
lines changed

src/xenia/base/filesystem.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
#include <filesystem>
1414
#include <iterator>
1515
#include <memory>
16+
#include <regex>
1617
#include <string>
1718
#include <string_view>
1819
#include <vector>
@@ -123,6 +124,9 @@ struct FileInfo {
123124
};
124125
bool GetInfo(const std::filesystem::path& path, FileInfo* out_info);
125126
std::vector<FileInfo> ListFiles(const std::filesystem::path& path);
127+
std::vector<FileInfo> ListDirectories(const std::filesystem::path& path);
128+
std::vector<FileInfo> FilterByName(const std::vector<FileInfo>& files,
129+
const std::regex pattern);
126130

127131
#if XE_PLATFORM_ANDROID
128132
void AndroidInitialize();

src/xenia/base/filesystem_win.cc

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -261,5 +261,29 @@ std::vector<FileInfo> ListFiles(const std::filesystem::path& path) {
261261
return result;
262262
}
263263

264+
std::vector<FileInfo> ListDirectories(const std::filesystem::path& path) {
265+
std::vector<FileInfo> files = ListFiles(path);
266+
std::vector<FileInfo> directories = {};
267+
268+
std::copy_if(
269+
files.cbegin(), files.cend(), std::back_inserter(directories),
270+
[](FileInfo file) { return file.type == FileInfo::Type::kDirectory; });
271+
272+
return directories;
273+
}
274+
275+
std::vector<FileInfo> FilterByName(const std::vector<FileInfo>& files,
276+
const std::regex pattern) {
277+
std::vector<FileInfo> filtered_entries = {};
278+
279+
std::copy_if(files.cbegin(), files.cend(),
280+
std::back_inserter(filtered_entries), [pattern](FileInfo file) {
281+
return std::regex_match(file.name.filename().string(),
282+
pattern);
283+
});
284+
285+
return filtered_entries;
286+
}
287+
264288
} // namespace filesystem
265289
} // namespace xe

0 commit comments

Comments
 (0)