示例:
的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;分别将它们插入字符串?
答案 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;
}
上面的代码是从一个流到另一个流的内容的副本。 (它适用于任何标准输入/输出流)