diff --git a/.gitignore b/.gitignore index 3314f2b..faa2bf6 100644 --- a/.gitignore +++ b/.gitignore @@ -57,3 +57,5 @@ test_pEpLog_basic /test/pitytest11/test/pitytest_data/ /test/test_pEpSQLite /test/test_swarm_tofu +/test/test_file_rw_bin +/test/test_rw.bin diff --git a/src/std_utils.cc b/src/std_utils.cc index 138fff8..d83da57 100644 --- a/src/std_utils.cc +++ b/src/std_utils.cc @@ -118,6 +118,32 @@ namespace pEp { return ss.str(); } + std::vector file_read_bin(const std::string &filename) + { + std::vector ret{}; + if (pEp::Utils::path_exists(filename)) { + std::ifstream ifs(filename, std::ios_base::binary); + ifs.unsetf(std::ios_base::skipws); + + if (ifs.bad()) { + throw std::runtime_error("failed to read file: '" + filename + "'"); + } + ret = { std::istream_iterator(ifs), std::istream_iterator() }; + } else { + throw std::runtime_error("File does not exist: '" + filename + "'"); + } + return ret; + } + + void file_write_bin(const std::string &filename, std::vector &data) + { + std::fstream f(filename, std::ios_base::out | std::ios_base::binary | std::ios_base::trunc); + f.write(data.data(), static_cast(data.size())); + if (f.bad()) { + throw std::runtime_error("failed to write file: '" + filename + "'"); + } + } + #ifndef WIN32 void path_ensure_not_existing(const string &path) { diff --git a/src/std_utils.hh b/src/std_utils.hh index 4c15ef4..8f54e45 100644 --- a/src/std_utils.hh +++ b/src/std_utils.hh @@ -40,6 +40,8 @@ namespace pEp { // file std::ofstream file_create(const std::string &filename); std::string file_read(const std::string &filename); + std::vector file_read_bin(const std::string& filename); + void file_write_bin(const std::string& filename, std::vector& data); // dir #ifndef WIN32