7

重複の可能性:
c++ でファイルを std::string に丸呑みする最良の方法は何ですか?

このような質問がすでにあると思いましたが、見つかりませんでした。それで、ここに私の質問があります。

テキスト ファイル全体を文字列に読み込む最短の方法は何ですか? 最新の C++ 標準および標準ライブラリの機能のみを使用したい。

この一般的なタスクにはワンライナーが必要だと思います!

4

2 に答える 2

8

おそらくこれ:

std::ifstream fin("filename");
std::ostringstream oss;
oss << fin.rdbuf();
std::string file_contents = oss.str();

これもあります:

std::istreambuf_iterator<char> begin(fin), end;
std::string file_contents(begin, end);

これを提案する人もいるかもしれませんが、私はistreambuf_iterator<char>一度だけ入力することを好みます。

std::string file_contents(std::istreambuf_iterator<char>{fin}, std::istreambuf_iterator<char>());
于 2012-12-10T14:15:14.200 に答える
1

1つのステートメントを使用してファイルを読み込むにはstd::string(1行に収まるかどうかは、行の長さによって異なります...)、次のようになります。

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

残念ながら、このアプローチは、エクストラを使用するほど高速ではないことがよくありstd::ostringstreamます(ただし、実際には高速である必要があります...)。

于 2012-12-10T15:40:19.987 に答える