在将数据传递到字符串中时,如何保留文件的格式?
How do I retain a file's formatting when passing its data into a string?
示例:
测试.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;
}
上面的代码是内容从一个流到另一个流的副本。(它适用于任何标准输入/输出流)
相关文章:
- 有根的二进制搜索树.保留与其父级的链接
- 为多个会话保留XPtr
- 保留对其他类的成员函数的引用
- 指针保留字符串
- 是否有内置方法可以强制转换为不同的基础类型,但保留常量限定符?
- 如何让 GCC/Clang 在保留标识符上出错
- 必须为 C++20 协程帧保留多少内存?
- 如何将一个窗口保留在另一个应用程序窗口的前面
- 使用 char 分隔符解析C++中的字符串,但将可重复的字符保留为每个解析的子字符串 (C++ STL) 中的分隔符
- 局部变量保留函数中的值
- 保留函数指针模板参数
- 变量超出范围后如何保留向量值?
- C++矢量复制构造函数和赋值运算符是否也复制保留空间?
- 当为可变性配置时,boost::heap::d_ary_heap 保留的额外 std::list 的目的是什么?
- 如何使用 swig 修改类构造函数以保留对其中一个构造函数参数的引用?
- 即使在使用 delete[] 后仍保留的元素
- 如何在成为指向基类的指针后保留对子类方法的使用?
- 将成员函数保留为未定义
- C++:如何为多个重载函数保留通用代码路径?
- C++ 删除存在于另一个矢量中的矢量项,同时保留顺序