如何将文件读入std::string
,即一次性读取整个文件?
文本或二进制模式应由调用方指定。该解决方案应该是符合标准的、可移植的和高效的。它不应该不必要地复制字符串的数据,并且应该避免在读取字符串时重新分配内存。
要做到这一点,一种方法是统计文件大小,将std::string
和fread()
调整为std::string
的const_cast<char*>()
'ed data()
。这要求std::string
的数据是连续的,这不是标准所要求的,但似乎所有已知的实现都是这样的。更糟糕的是,如果文件是以文本模式读取的,则std::string
的大小可能不等于文件的大小。
使用std::ifstream
的rdbuf()
可以构建一个完全正确的、符合标准的和可移植的解决方案到std::ostringstream
和std::string
中。然而,这可能会复制字符串数据和/或不必要的内存重新分配。
的隐藏Boost函数
void slurp(std::string& data, bool is_binary)
https://stackoverflow.com/questions/116038
复制相似问题