在将数据传递到字符串中时,如何保留文件的格式?

How do I retain a file's formatting when passing its data into a string?

本文关键字:保留 何保留 文件 格式 数据 字符串      更新时间:2023-10-16

示例:

测试.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"和""并将它们插入字符串中?

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

您可以使用:

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

使用此功能将保留所有换行符。制表符和空格将保留std::getline(infile, buffer);

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

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

此外,您的循环条件是错误的。 eof位在您尝试读取之前不会设置,然后失败,因为您已经到达文件末尾。 这意味着您将添加最后一行两次。 您应该将循环条件更改为以下内容:

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

或者,您可以执行此操作而不是使用循环,一次性读取整个文件:

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

Getline() 在读取后不包含 "" 符号。为每行手动添加它。

#include <iostream>
#include <sstream>
int main() {
    std::istringstream input("HellonXMLn");
    std::ostringstream output;
    output << input.rdbuf();
    std::cout << output.str();
    return 0;
}

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