И самое быстрое (что я знаю о, обесценивая файлы с отображенной памятью):
std::string str(static_cast<std::stringstream const&>(std::stringstream() << in.rdbuf()).str());
Это требует дополнительного заголовка <sstream>
для строкового потока. (Эти static_cast
необходимо с тех пор operator <<
возвраты простое ostream&
, но мы знаем, что в действительности it’s stringstream&
, таким образом, бросок безопасен.)
Разделение в несколько строк, перемещая временный файл в переменную, мы получаем более читаемый код:
std::string slurp(std::ifstream& in) {
std::stringstream sstr;
sstr << in.rdbuf();
return sstr.str();
}
Или, еще раз в одной строке:
std::string slurp(std::ifstream& in) {
return static_cast<std::stringstream const&>(std::stringstream() << in.rdbuf()).str();
}
Если вы работаете под Cygwin, попробуйте запустить это в файлах базы данных:
chmod 777 <your-files>
Cygwin может запутаться в том, какие разрешения следует применять.
Да, я знаю, что эти разрешения смешны , но иногда и Сигвин ...