38 static std::string read_content(std::istream& s);
43 static std::string read_content(
const std::filesystem::path& p);
48 static void write_content(
const std::filesystem::path& path,
49 const std::string& content);
54 template<
typename Ioable>
55 static void write(
const std::filesystem::path& path,
const Ioable& target) {
57 std::ofstream os(path);
58 os.exceptions(std::ifstream::failbit | std::ifstream::badbit);
60 }
catch (
const std::exception& e) {
62 s <<
"An error occurred whilst trying to write a file. Path: '"
63 << path.generic_string() <<
"'. Error: " << e.what();
76 static std::set<std::filesystem::path>
77 find_files(
const std::filesystem::path& dir);
78 static std::set<std::filesystem::path>
79 find_files(
const std::vector<std::filesystem::path>& dirs);
80 static std::set<std::filesystem::path>
81 find_files(
const std::list<std::filesystem::path>& dirs);
88 static std::filesystem::path find_file_recursively_upwards(
89 std::filesystem::path starting_directory,
90 const std::filesystem::path& relative_file_path);
95 static void remove(
const std::list<std::filesystem::path>& files);
101 static void remove_empty_directories(
const std::filesystem::path& dir);
102 static void remove_empty_directories(
const std::list<std::filesystem::path>& dirs);
111 static void recreate_directory(
const std::filesystem::path& dir);