ofstream不翻译" \ r \ n"到新线字符

时间:2015-07-09 07:40:04

标签: c++ ofstream

我编写了一个用于更改文件格式的c ++代码。部分功能是添加已配置的行结束字符。对于其中一个文件转换,所需的行结束字符是" \ r \ n"即CR + NL。

我的代码基本上从DB读取配置的值并将其附加到每条记录的末尾。

的内容
//read DB and store line end char in a string lets say lineEnd.
//code snippet for file writting
string record = "this is a record";

ofstream outFileStream;
string outputFileName = "myfile.txt";
outFileStream.open (outputFileName.c_str());
outFileStream<<record;
outFileStream<<lineEnd; // here line end contains "\r\n"

但这会打印记录后跟\ r \ n原样,不会转换为CR + NL。

  

这是一条记录\ r \ n

以下工作原理(在输出文件中打印CR + LF)

outFileStream<<record;
outFileStream<<"\r\n";
  

这是一条记录

但我不能硬编码。我正面临着类似的问题&#34; \ n&#34;还

有关如何操作的任何建议。

1 个答案:

答案 0 :(得分:2)

在解析源代码时,编译器\r转换为ASCII字符CR和\n转换为ASCII字符LF,仅在文字中完成。也就是说,字符串文字"A\n"将是一个3个字符的数组,其值为65 10 0

输出流不以任何方式解释转义序列。如果您要求输出流将字符\r相互写入,则会执行此操作(使用ASCII值92和114写入字符)。如果你要求它写字符CR(ASCII代码13),它就会这样做。

std::cout << "\r";写CR字符的原因是字符串文字已包含字符13.因此,如果您的数据库包含字符串\r\n(4个字符:\,{{1 }},\r\,ASCII n),这也是您将在输出时获得的字符串。如果它包含ASCII 92 114 92 110的字符串,那就是你得到的。

当然,如果您将13 10存储在数据库中是不切实际的,那么没有什么能阻止您存储13 10(字符串&#34; \ r \ n&#34; )在那里,并在运行时进行翻译。像这样:

92 114 92 110