1

是否有一种方法可以将(不是很大)文本文件的内容读入字符串?

我发现的最短的:

#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

4

2 回答 2

8

您可以在单个语句中执行此操作:

std::string str(std::istreambuf_iterator<char>(std::ifstream("file.txt").rdbuf()), std::istreambuf_iterator<char>());

这是否是单线取决于您的显示器有多大......

于 2013-03-27T15:22:29.380 回答
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);

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

于 2013-03-27T15:02:18.883 回答