Как мне прочитать файл в std::string, т. Е. Прочитать весь файл сразу?
Текстовый или двоичный режим должен быть указан вызывающим. Решение должно быть совместимым со стандартами, портативным и эффективным. Он не должен без необходимости копировать данные строки и должен избегать перераспределения памяти при чтении строки.
Один из способов сделать это - установить размер файла, изменить размер std::string и fread() на const_cast<char*>()'ed data() std::string. Для этого требуется, чтобы данные std::string были непрерывными, что не требуется стандартом, но, похоже, так обстоит дело для всех известных реализаций. Что еще хуже, если файл читается в текстовом режиме, размер std::string может не совпадать с размером файла.
Полностью правильные, совместимые со стандартами и переносимые решения могут быть созданы с использованием rdbuf() std::ifstream в std::ostringstream, а оттуда в std::string. Однако это может скопировать строковые данные и / или без необходимости перераспределить память.
- Достаточно ли умны все соответствующие реализации стандартных библиотек, чтобы избежать ненужных накладных расходов?
- Есть другой способ сделать это?
- Я пропустил какую-то скрытую функцию Boost, которая уже обеспечивает желаемую функциональность?
void slurp(std::string& data, bool is_binary)
rdbuf(тот, что в принятом ответе) не самый быстрый,read. - person legends2k   schedule 27.11.2014