c++中一个将文本文件读入std::string的单行代码

A one-liner to read text file into std::string in c++?

本文关键字:std string 代码 单行 文件 文本 一个 c++      更新时间:2023-10-16

是否有一行代码将(不是很大的)文本文件的内容读取为字符串?

我找到的最短的:

#include <string>
#include <fstream>
#include <streambuf>
std::ifstream t("file.txt");
std::string str((std::istreambuf_iterator<char>(t)),
                 std::istreambuf_iterator<char>());

(对于大文件,这是一个非常低效的解决方案,因为它必须在从流中读取每个新字符后重新分配缓冲区)

将整个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);

"代码行数更少"并不总是意味着"更好"