lxgui
utils_file_system.cpp
1 #include "lxgui/utils_file_system.hpp"
2 
3 #include "lxgui/utils_std.hpp"
4 #include "lxgui/utils_string.hpp"
5 
6 #include <filesystem>
7 
8 namespace lxgui::utils {
9 
10 bool file_exists(const std::string& file) {
11  return std::filesystem::exists(file) && std::filesystem::is_regular_file(file);
12 }
13 
14 string_vector get_directory_list(const std::string& rel_path) {
15  string_vector dir_list;
16  for (const auto& entry : std::filesystem::directory_iterator(rel_path)) {
17  if (entry.is_directory())
18  dir_list.push_back(entry.path().filename().u8string());
19  }
20 
21  return dir_list;
22 }
23 
24 string_vector get_file_list(const std::string& rel_path, bool with_path) {
25  string_vector file_list;
26  for (const auto& entry : std::filesystem::directory_iterator(rel_path)) {
27  if (entry.is_regular_file()) {
28  if (with_path)
29  file_list.push_back(entry.path().relative_path().u8string());
30  else
31  file_list.push_back(entry.path().filename().u8string());
32  }
33  }
34 
35  return file_list;
36 }
37 
39 get_file_list(const std::string& rel_path, bool with_path, const std::string& extensions) {
40  auto extension_list = utils::cut(extensions, ",");
41  for (auto& extension : extension_list)
42  extension = utils::trim(extension, ' ');
43 
44  string_vector file_list;
45  for (const auto& entry : std::filesystem::directory_iterator(rel_path)) {
46  if (entry.is_regular_file()) {
47  if (utils::find(extension_list, entry.path().extension().u8string()) !=
48  extension_list.end()) {
49  if (with_path)
50  file_list.push_back(entry.path().relative_path().u8string());
51  else
52  file_list.push_back(entry.path().filename().u8string());
53  }
54  }
55  }
56 
57  return file_list;
58 }
59 
60 bool make_directory(const std::string& path) {
61  std::filesystem::create_directories(path);
62  return std::filesystem::exists(path) && std::filesystem::is_directory(path);
63 }
64 
65 std::string get_file_extension(const std::string& file) {
66  return std::filesystem::path(file).extension().u8string();
67 }
68 
69 } // namespace lxgui::utils
auto find(C &v, const T &s)
Definition: utils_std.hpp:14
bool make_directory(const std::string &path)
string_vector get_file_list(const std::string &rel_path, bool with_path)
string_vector get_directory_list(const std::string &rel_path)
std::string get_file_extension(const std::string &file)
bool file_exists(const std::string &file)
std::vector< std::string > string_vector