sunshine-sdk/src/file_handler.cpp

61 lines
1.3 KiB
C++

/**
* @file file_handler.cpp
* @brief Definitions for file handling functions.
*/
// standard includes
#include <filesystem>
#include <fstream>
// local includes
#include "file_handler.h"
#include "logging.h"
namespace file_handler {
std::string
get_parent_directory(const std::string &path) {
// remove any trailing path separators
std::string trimmed_path = path;
while (!trimmed_path.empty() && trimmed_path.back() == '/') {
trimmed_path.pop_back();
}
std::filesystem::path p(trimmed_path);
return p.parent_path().string();
}
bool
make_directory(const std::string &path) {
// first, check if the directory already exists
if (std::filesystem::exists(path)) {
return true;
}
return std::filesystem::create_directories(path);
}
std::string
read_file(const char *path) {
if (!std::filesystem::exists(path)) {
BOOST_LOG(debug) << "Missing file: " << path;
return {};
}
std::ifstream in(path);
return std::string { (std::istreambuf_iterator<char>(in)), std::istreambuf_iterator<char>() };
}
int
write_file(const char *path, const std::string_view &contents) {
std::ofstream out(path);
if (!out.is_open()) {
return -1;
}
out << contents;
return 0;
}
} // namespace file_handler