如何将文件读入std::string
,即一次读取整个文件?
文本或二进制模式应由调用方指定。该解决方案应符合标准,可移植且高效。它不应不必要地复制字符串的数据,并且应避免在读取字符串时重新分配内存。
这样做将是STAT的文件大小,单向调整std::string
和fread()
进入std::string
的const_cast<char*>()
'编辑data()
。这就要求std::string
的数据是连续的,这不是标准所要求的,但是对于所有已知的实现来说都是如此。更糟糕的是,如果以文本模式读取文件,则文件std::string
的大小可能不等于文件的大小。
一个完全正确的,符合标准的和便携式解决方案可以使用以下构建std::ifstream
的rdbuf()
进入std::ostringstream
,并从那里进入std::string
。但是,这可能会复制字符串数据和/或不必要地重新分配内存。
- 所有相关的标准库实现是否足够聪明,可以避免所有不必要的开销?
- 还有另一种方法吗?
- 我是否错过了一些已经提供所需功能的隐藏Boost功能?
void slurp(std::string& data, bool is_binary)