为什么std :: ofStream添加额外的#13(newline)字符? 我正在使用基本的std :: ofstream对象,创建如下: output_stream = std :: ofstream(output_file.c_str()); 这创建了一个文件,其中包含了一些信息。让我显示一个示例...

问题描述 投票:0回答:2
output_stream = std::ofstream(output_file.c_str());

创建一个文件,其中包含一些信息。让我显示这样的消息的示例:(观看窗口摘录)

full_Message "Error while processing message:\r\n\tForecast Request:"
所有这一切都可以,但是在启动以下命令之后,存在一个问题:

output_stream << full_Message; output_stream.flush();

为了查看出错,让我们看一下文件的十六进制转储:(这是文件的十六进制显示,如记事本++所示。由于清晰的原因,我拍摄了屏幕截图。)


您可以看到,字符

0d

倍加倍,导致以下显示: Notepad++ Hexdump screenshotError while processing message: Forecast Request:

(有太多新线,这两条线都应该直接是另一行)

我知道在从UNIX/Linux转换为Windows的文件转换时添加了
#13

字符,但这在这里与Windows文件纯粹是与Windows文件一起工作的不相关的,因此不需要添加任何
#13
targne.

如何避免添加这个额外的角色?

流默认为
文本模式
,这意味着在Windows中,如果您编写

\n

,则文件获取。 因此,如果写

\r\n
c++ windows newline fstream ostream
2个回答
18
投票
\r\n

要解决此问题,要么在您的代码中编写\r\r\n

;  或以
二进制模式打开文件:
\n
    
默认情况下,库将

auto output_stream = std::ofstream(output_file.c_str(), std::ios::binary);

转换为需要的文本流(例如Windows)。

因此,您不需要在字符串中明确的马车回收。它是自动处理的

如果您想明确指定返回马车,则需要以二进制模式打开文件。 读取文本流时,会发生相反的转换,然后转换为

'\n'

5
投票
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.