我正在使用基本的std::ofstream
对象,创建如下:
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();
为了查看错误,让我们看一下文件的十六进制转储:(这是文件的十六进制显示,如Notepad ++中所示。为清楚起见,我已截取屏幕截图。)
如您所见,角色0d
加倍,导致以下显示:
Error while processing message:
Forecast Request:
(换行线太多,两行应该一个接一个地直接)
我知道在从UNIX / Linux到Windows进行文件转换时添加了#13
字符,但这与此无关:我纯粹是在Windows系统上使用Windows文件,所以不需要添加任何#13
字符。
有人知道如何避免添加这个额外的角色吗?
提前致谢
答案 0 :(得分:5)
流默认为文本模式,这意味着在Windows中,如果您编写\n
,则文件将获得\r\n
。因此,如果您编写\r\n
,则文件会获得\r\r\n
。
要解决此问题,请在代码中写下\n
;或者以二进制模式打开文件:
auto output_stream = std::ofstream(output_file.c_str(), std::ios::binary);
答案 1 :(得分:1)
因为默认情况下,库会将do
for (( k = i; k <= n; k++ ))
do
echo -ne " "
done
for (( j = 1; j <= 2 * i - 1; j++ ))
do
echo -ne "*"
done
转换为'\n'
,以便在需要它的平台(如Windows)上转换文本流。
因此,您不需要在字符串中明确回车。它会自动处理。
如果要明确指定回车符,则需要以二进制模式打开文件。
在阅读文字流时,会发生相反的转化,"\r\n"
转换为"\r\n"
。