1

例:

テスト.xml:

<Test>
    This is a test.
</Test>

これは、各行を読み取り、それを「ファイル」文字列に追加するコードです。

std::ifstream infile("Test.xml");
if (infile.is_open()) {
    while (!infile.eof()) {
        std::getline(infile, buffer); // "buffer" variable was created before-hand
        file += buffer;
    }
}

しかし、「ファイル」文字列を出力すると、次のようになります。

<Test>    This is a test </Test>

フォーマットされたプロパティを保持する必要がある場合。

ファイルを読み取るときに、タブと改行をそれぞれ「\ t」と「\ n」として保持し、それらを文字列に挿入できる方法があるかどうか知りたいです。

4

4 に答える 4

1

を呼び出すとgetline、改行が削除されます。したがって、それを元に戻すことができます。

file += buffer;
file += '\n';

また、ループ条件が間違っています。読み取りを試行するまでビットは設定されませんが、ファイルのeof最後に到達したために失敗します。これは、最後の行を 2 回追加することを意味します。代わりに、ループ条件を次のように変更する必要があります。

while (std::getline(infile, buffer))

または、ループを使用する代わりにこれを実行して、ファイル全体を一度に読み取ることもできます。

std::ostringstream oss;
oss << infile.rdbuf();
file = oss.str();
于 2013-09-14T13:47:42.240 に答える
1

std::getline(infile, buffer);末尾の改行は含まれません

以下を使用できます。

file += buffer + std::string(1,'\n');

これを使用すると、すべての改行が保持されます。タブとスペースはすでに保持されていますstd::getline(infile, buffer);

于 2013-09-14T13:47:51.470 に答える