将数据传递给字符串时如何保留文件的格式?

时间:2013-09-14 13:45:45

标签: c++ file text formatting

示例:

的test.xml:

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

这是将在每行中读取的代码并将其添加到&#34;文件&#34;字符串:

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

但是当我输出&#34;文件&#34;字符串它出现:

<Test>    This is a test </Test>

当我需要它来保留其格式化属性时。

我很想知道是否有办法在阅读文件时能够将标签和换行符保持为&#34; \ t&#34;和&#34; \ n&#34;分别将它们插入字符串?

4 个答案:

答案 0 :(得分:1)

getline的调用会删除新行。所以你可以把它添加回来。

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

此外,您的循环条件错误。在您尝试读取之前未设置eof位,然后因为您已到达文件末尾而失败。这意味着您将添加最后一行两次。你应该改变你的循环条件:

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

或者,您可以这样做而不是使用循环,一次性读取整个文件:

std::ostringstream oss;
oss << infile.rdbuf();
file = oss.str();

答案 1 :(得分:1)

std::getline(infile, buffer);不会包含尾随换行符

您可以使用:

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

使用此所有换行符将被保留。 标签和空格已经使用std::getline(infile, buffer);

保留

答案 2 :(得分:1)

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

答案 3 :(得分: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;
}

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