如何在没有CRLF的情况下在C#中编写WriteAllLines

我正在使用C#并尝试输出几行到ASCII文件。 我遇到的问题是我的Linux主机将这些文件视为:

ASCII text, with CRLF line terminators 

我需要这个文件只是:

 ASCII text 

CRLF引起了一些问题,我希望在C#中有一种方法可以创建以我想要的方式格式化的文件。

我基本上使用这段代码:

 string[] lines = { "Line1", "Line2" }; File.WriteAllLines(myOutputFile, lines, System.Text.Encoding.UTF8); 

有没有简单的方法来创建没有CRLF行终止符的文件? 我可以在Linux方面处理它,但宁愿从一开始就以适当的格式创建文件。

假设你实际上仍然想要换行,你只需要换行而不是回车/换行,你可以使用:

 File.WriteAllText(myOutputFile, string.Join("\n", lines)); 

或者如果你肯定也希望在最后一行之后换行:

 File.WriteAllText(myOutputFile, string.Join("\n", lines) + "\n"); 

(或者,正如您所说,您可以在Linux端修复它,例如使用dos2unix 。)

@ JonSkeet的答案是一个快速而简单的解决方案。 它的缺点是它在写入文件之前分配包含所有文本行的单个字符串。 对于大量文本,这可能会给内存管理系统带来压力。

允许没有额外分配的流线路的替代方案是:

 public static void WriteAllLines( string path, IEnumerable lines, string separator) { using (var writer = new StreamWriter(path)) { foreach (var line in lines) { writer.Write(line); writer.Write(separator); } } }