Windows中的C ++我无法将Enter字符放入.txt文件中

时间:2014-02-15 09:08:18

标签: c++ windows file text enter

我制作了一个程序,使用Huffman Coding来压缩和解压缩.txt文件(ANSI,Unicode,UTF-8,Big Endian Unicode ......)。

在解压缩中,我从二叉树中获取字符,然后将它们以二进制模式放入.txt中:

Ofstream F;
F.open("example.txt", ios::binary);

我必须以二进制模式写入.txt文件,因为我需要解压缩每种类型的.txt文件(不仅仅是ANSI),所以我的simbols是单个字节。

在Windows上它会放入每个simbol,但不关心Enter字符!

例如,如果我有这个example.txt文件:

Hello 
World!
=)

我将它压缩到example.dat文件中,然后将Huffman树保存到另一个文件(exampletree.dat)中。 现在解压缩example.dat我从exampletree.dat中保存的树中获取字符,然后通过put()fwrite()将它们放入一个新的.txt文件中,但在Windows上它将是这样的:< / p>

HelloWorld!=)

在Ubuntu上它可以正常工作并保存输入字符!

这不是代码错误,因为如果我在控制台中打印解压缩的.txt文件,它还会打印输入字符!所以Windows中存在问题!有人可以帮助我吗?

2 个答案:

答案 0 :(得分:0)

看起来在Linux和Windows上处理EndOfLine会有所不同。 EOL可以只是“\ n”或“\ r \ n” - 即Windows通常将0x0d,0x0a放在行的末尾。 在Windows上有以下区别:

fopen( "filename", "w" );

fopen( "filename", "tw" );

报价: 在文本模式下,回车换行组合在输入时转换为单行换行,换行符转换为输出上的回车换行组合

答案 1 :(得分:0)

您是否尝试使用wordpad或任何其他高级文本编辑器(Notepad ++)打开文件,该编辑器将LF标识为换行符。默认的编辑器记事本会将它放在您描述的单行中。

这可能不是您正在寻找的解决方案。但问题似乎是由于将LF作为换行符而不是Windows默认CR / LF。