2009-10-08 46 views
15

我正在编写在Windows中运行的代码,并输出一个后来成为Linux中程序输入的文本文件。当给定文件的换行符是CR + LF而不是LF时,此程序的行为不正确。C++将换行符从CR + LF更改为LF

我知道我可以使用像dos2unix这样的工具,但我想跳过额外的步骤。是否有可能在Windows中获得一个C++程序来使用Linux新行而不是Windows?

回答

23

是的,您必须以“二进制”模式打开文件才能停止换行符转换。

你怎么做取决于你如何打开文件。

使用fopen

FILE* outfile = fopen("filename", "wb"); 

使用ofstream

std::ofstream outfile("filename", std::ios_base::binary | std::ios_base::out); 
+1

同意。以二进制形式打开流,不进行翻译。 '\ n'或std :: endl输出到这样的流只会导致换行。 – Clifford

-1

OK,所以这可能不是你想要听到的,但这里是我的$ 0.02根据我这样的经历:

如果你需要在不同的平台之间传递数据,从长远来看,你最好使用一种不关心换行符的格式。如果是文本文件,用户有时会混淆他们。如果通过混淆行结束它们导致应用程序失败,这将成为支持密集型应用程序。

在那里,做到了,切换到XML。让支持者更快乐。

+0

如果只有我可以选择我必须使用的格式..... *空心笑*。 – GiantCowFilms