Есть ли однострочная строка для чтения содержимого (не очень большого) текстового файла в строку?
Самое короткое, что я нашел:
#include <string>
#include <fstream>
#include <streambuf>
std::ifstream t("file.txt");
std::string str((std::istreambuf_iterator<char>(t)),
std::istreambuf_iterator<char>());
(Для больших файлов обратите внимание, что это крайне неэффективное решение, поскольку он должен перераспределять буфер после каждого нового символа, который он читает из потока.)
кредит: @Tyler McHenry Прочитать весь файл ASCII в C ++ std :: string
Вы можете сделать это в одном утверждении:
std::string str(std::istreambuf_iterator<char>(std::ifstream("file.txt").rdbuf()), std::istreambuf_iterator<char>());
Является ли это однострочным, зависит от того, насколько велик ваш монитор …
обратите внимание, что он не подходит для больших файлов
Вместо «не подходит для больших файлов» Я бы скорее сказал, что это крайне неэффективно решение, так как он должен повторно перераспределять буфер по мере чтения новых символов из потока.
Также обратите внимание, что количество строк вашего кода в этом случае является одной из метрик, на которые вам следует обращать меньше всего внимания. Когда у вас есть ifstream
объект (имя которого должно быть более значимым, чем t
),
Вы должны проверить его состояние, будь то is_open()
и гораздо более разумный способ чтения из этого, кажется, такой подход:
// obtain the size of the input file stream:
file.seekg(0, std::ios::end);
std::streampos fileSize = file.tellg();
file.seekg(0, std::ios::beg);
// read the file into the string:
std::string fileData(fileSize);
file.read(&fileData[0], fileSize);
«Меньше строк кода» не всегда значит «лучше».