#include "file.h" #include namespace fs = std::filesystem; using namespace std::string_literals; std::string Reichwein::File::getFile(const fs::path& filename) { std::ifstream file(filename.string(), std::ios::in | std::ios::binary); if (file.is_open()) { file.seekg(0, std::ios::end); std::ifstream::pos_type fileSize = file.tellg(); if (fileSize < 0) { // on pseudo-files (e.g. /proc/*), this doesn't work. Use a slower workaround: std::stringstream buffer; buffer << file.rdbuf(); return buffer.str(); } file.seekg(0, std::ios::beg); std::string bytes(fileSize, ' '); file.read(reinterpret_cast(bytes.data()), fileSize); return bytes; } else { throw std::runtime_error("Opening "s + filename.string() + " for reading"); } } void Reichwein::File::setFile(const fs::path& filename, const std::string& s) { Reichwein::File::setFile(filename, s.data(), s.size()); } void Reichwein::File::setFile(const fs::path& filename, const char* data, size_t size) { std::ofstream file(filename.string(), std::ios::out | std::ios::binary); if (file.is_open()) { file.write(data, size); } else { throw std::runtime_error("Opening "s + filename.string() + " for writing"); } } void Reichwein::File::setFile(const fs::path& filename, const std::vector& data) { Reichwein::File::setFile(filename, reinterpret_cast(data.data()), data.size()); }