C++ read the whole file in buffer [duplicate]
There's no need for wrapper classes for very basic functionality:
std::ifstream file("myfile", std::ios::binary | std::ios::ate);
std::streamsize size = file.tellg();
file.seekg(0, std::ios::beg);
std::vector<char> buffer(size);
if (file.read(buffer.data(), size))
{
/* worked! */
}
You can access the contents of a file with a input file stream std::ifstream, then you can use std::istreambuf_iterator to iterate over the contents of the ifstream,
std::string
getFileContent(const std::string& path)
{
std::ifstream file(path);
std::string content((std::istreambuf_iterator<char>(file)), std::istreambuf_iterator<char>());
return content;
}
In this case im using the iterator to build a new string using the contents of the ifstream, the std::istreambuf_iterator<char>(file)
creates an iterator to the begining of the ifstream, and std::istreambuf_iterator<char>()
is a default-constructed iterator that indicate the special state "end-of-stream" which you will get when the first iterator reach the end of the contents.
Something I have in most of my programs:
/** Read file into string. */
inline std::string slurp (const std::string& path) {
std::ostringstream buf;
std::ifstream input (path.c_str());
buf << input.rdbuf();
return buf.str();
}
Can be placed in a header.
I think I have found it here: https://stackoverflow.com/a/116220/257568