std::ifstream f("file.txt"); if (f) { std::stringstream buffer; buffer << f.rdbuf(); f.close(); // The content of "file.txt" is available in the string `buffer.str()` }
该rdbuf()方法返回一个指向的指针,该指针streambuf可以buffer通过stringstream::operator<<成员函数推入。
另一种可能性(斯科特·迈耶斯(Scott Meyers)在“有效的STL”中提出)是:
std::ifstream f("file.txt"); if (f) { std::string str((std::istreambuf_iterator<char>(f)), std::istreambuf_iterator<char>()); // 在`str`上的操作... }
这很好,因为它只需要很少的代码(并允许将文件直接读取到任何STL容器中,不仅包括字符串),而且对于大文件而言可能会很慢。
注意:字符串构造函数第一个参数周围的多余括号对于防止最棘手的解析问题至关重要。
最后但并非最不重要的:
std::ifstream f("file.txt"); if (f) { f.seekg(0, std::ios::end); const auto size = f.tellg(); std::string str(size, ' '); f.seekg(0); f.read(&str[0], size); f.close(); // 在`str`上的操作... }
这可能是最快的选择(在建议的三个之中)。