C++: Read file content into string
Sometimes you have to do something silly such as reading the entire contents of a file into a string. In this particular example we wish to end up with an std::string
which contains the binary representation of a file - just as it resides on the disk.
There are several approaches to this. One of the more popular solutions to the problem is using boost’s boost::filesystem::load_string_file()
. However, this comes with the common cost when working with boost: You have to use boost.
The following code snippet illustrates a function which achieves the same result but using only pure C++17:
#include <filesystem>
#include <fstream>
/**
* Returns an std::string which represents the raw bytes of the file.
*
* @param path The path to the file.
* @return The content of the file as it resides on the disk - byte by byte.
*/
[[nodiscard]]
static std::string file_contents(const std::filesystem::path& path)
{
// Sanity check
if (not std::filesystem::is_regular_file(path))
return { };
// Open the file
// Note that we have to use binary mode as we want to return a string
// representing matching the bytes of the file on the file system.
std::ifstream file(path, std::ios::in | std::ios::binary);
if (not file.is_open())
return { };
// Read contents
const std::size_t& size = std::filesystem::file_size(path);
std::string content(size, '\0');
file.read(content.data(), size);
// Close the file
file.close();
return content;
}
Feel free to use this however you see fit. However, as usual this comes without any form of warranty - use at your own risk!