如何将文件读入std::string
,即一次读取整个文件?
文本或二进制模式应该由调用者指定。解决方案应该是符合标准的、可移植的和高效的。它不应该不必要地复制字符串的数据,并且应该避免在读取字符串时重新分配内存。
一种方法是统计文件大小,将std::string
和fread()
调整为std::string
的const_cast<char*>()
'ed data()
。这要求std::string
的数据是连续的,这不是标准所要求的,但它似乎是所有已知实现的情况。更糟糕的是,如果以文本模式读取文件,std::string
的大小可能不等于文件的大小。
一个完全正确的、符合标准的、可移植的解决方案可以使用std::ifstream
的rdbuf()
构造为std::ostringstream
,再从那里构造为std::string
。但是,这可能会复制字符串数据和/或不必要地重新分配内存。
< br >
void slurp(std::string& data, bool is_binary)