在c ++中将文本文件读入std :: string的单行程序?

时间:2013-03-27 14:51:02

标签: c++ string file-io ifstream lines-of-code

是否有单行将一个(不是很大的)文本文件的内容读入字符串?

我找到的最短的时间:

#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

2 个答案:

答案 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);

“减少代码行数”并不总是意味着“更好”