// Copyright (c) 2016 Egor Tensin // This file is part of the "AES tools" project. // For details, see https://github.com/egor-tensin/aes-tools. // Distributed under the MIT License. #include #include #include #include #include #include #include #include namespace file { inline std::size_t cast_to_size_t(std::streamoff size) { assert(size >= 0); assert(static_cast::type>(size) <= std::numeric_limits::max()); return static_cast(size); } inline std::size_t get_file_size(const std::string& path) { std::ifstream ifs; ifs.exceptions(std::ifstream::badbit | std::ifstream::failbit); ifs.open(path, std::ifstream::binary | std::ifstream::ate); return cast_to_size_t(ifs.tellg()); } inline std::vector read_file(const std::string& path) { const auto size = get_file_size(path); std::ifstream ifs; ifs.exceptions(std::ifstream::badbit | std::ifstream::failbit); ifs.open(path, std::ifstream::binary); std::vector src_buf; src_buf.reserve(size); src_buf.assign( std::istreambuf_iterator(ifs), std::istreambuf_iterator()); return src_buf; } inline void write_file( const std::string& path, const void* buffer, const std::size_t size) { std::ofstream ofs; ofs.exceptions(std::ofstream::badbit | std::ofstream::failbit); ofs.open(path, std::ofstream::binary); ofs.write(reinterpret_cast(buffer), size); } inline void write_file( const std::string& path, const std::vector& src) { write_file(path, src.data(), src.size()); } }