36 inline static std::string_view logger_name =
37 "ores.utility.filesystem.file";
41 static auto instance = make_logger(logger_name);
49 static std::string read_content(std::istream& s);
54 static std::string read_content(
const std::filesystem::path& p);
59 static void write_content(
const std::filesystem::path& path,
60 const std::string& content);
65 template<
typename Ioable>
66 static void write(
const std::filesystem::path& path,
const Ioable& target) {
68 std::ofstream os(path);
69 os.exceptions(std::ifstream::failbit | std::ifstream::badbit);
71 }
catch (
const std::exception& e) {
73 s <<
"An error occurred whilst trying to write a file. Path: '"
74 << path.generic_string() <<
"'. Error: " << e.what();
87 static std::set<std::filesystem::path>
88 find_files(
const std::filesystem::path& dir);
89 static std::set<std::filesystem::path>
90 find_files(
const std::vector<std::filesystem::path>& dirs);
91 static std::set<std::filesystem::path>
92 find_files(
const std::list<std::filesystem::path>& dirs);
99 static std::filesystem::path find_file_recursively_upwards(
100 std::filesystem::path starting_directory,
101 const std::filesystem::path& relative_file_path);
106 static void remove(
const std::list<std::filesystem::path>& files);
112 static void remove_empty_directories(
const std::filesystem::path& dir);
113 static void remove_empty_directories(
const std::list<std::filesystem::path>& dirs);
122 static void recreate_directory(
const std::filesystem::path& dir);