This gist contains C++ helper functions to read and write files.
FileHelper.h:
#include <string>
#include <vector>
std::vector<unsigned char> ReadAllBytes(const std::string& fileName);
void WriteAllBytes(const std::string& fileName, const std::vector<unsigned char>& data);
FileHelper.cpp:
#include <algorithm>
#include <fstream>
#include <iterator>
#include <stdexcept>
#include <string>
#include <vector>
std::vector<unsigned char> ReadAllBytes(const std::string& fileName)
{
if(fileName.empty())
{
throw std::invalid_argument("Invalid file name.");
}
std::ifstream fileStream(fileName, std::ios::in | std::ios::binary);
if(!fileStream)
{
throw std::runtime_error("Could not open file: " + fileName);
}
fileStream.unsetf(std::ios::skipws);
fileStream.seekg(0, std::ios::end);
auto fileLength = fileStream.tellg();
std::vector<unsigned char> result;
result.reserve(static_cast<std::vector<unsigned char>::size_type>(fileLength));
fileStream.seekg(0, std::ios::beg);
result.insert
(
result.begin(),
std::istream_iterator<unsigned char>(fileStream),
std::istream_iterator<unsigned char>()
);
fileStream.close();
return result;
}
void WriteAllBytes(const std::string& fileName, const std::vector<unsigned char>& data)
{
if(fileName.empty())
{
throw std::invalid_argument("Invalid file name.");
}
std::ofstream fileStream(fileName, std::ios::out | std::ios::binary | std::ios::trunc);
if(!fileStream)
{
throw std::runtime_error("Could not open file: " + fileName);
}
std::copy(data.cbegin(), data.cend(), std::ostream_iterator<unsigned char>(fileStream));
fileStream.close();
return;
}