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位,然后因为您已到达文件末尾而失败。这意味着您将添加最后一行两次。您应该将循环条件更改为此:

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 回答
1

Getline() 读取后不包含“\n”符号。为每一行手动添加它。

于 2013-09-14T13:49:11.880 回答
0
#include <iostream>
#include <sstream>

int main() {
    std::istringstream input("Hello\nXML\n");
    std::ostringstream output;
    output << input.rdbuf();
    std::cout << output.str();
    return 0;
}

上面的代码是从一个流到另一个流的内容副本。(它适用于任何标准输入/输出流)

于 2013-09-14T16:32:29.893 回答