是否有单行将一个(不是很大的)文本文件的内容读入字符串?
我找到的最短的时间:
#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 Read whole ASCII file into C++ std::string答案 0 :(得分:7)
您可以在一个声明中执行此操作:
std::string str(std::istreambuf_iterator<char>(std::ifstream("file.txt").rdbuf()), std::istreambuf_iterator<char>());
这是一个单行代码取决于你的显示器有多大......
答案 1 :(得分:3)
请注意,它不适合大文件
而不是“不适合大文件”我宁愿说它是 非常低效的 解决方案,因为它必须反复重新分配正在从流中读取新字符的缓冲区。
另请注意,在这种情况下,您的代码行数是您应该最不重视的指标之一。一旦你有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);
“减少代码行数”并不总是意味着“更好”。