如何在C#WriteAllLines没有CRLF(How to WriteAllLines in C

2019-06-25 10:15发布

我使用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端呵护它,但宁愿只是从一开始就正确的格式创建的文件。

Answer 1:

假设你还是真正想要的换行符,你只是想换行,而不是回车/换行,你可以使用:

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

或者,如果你一定要在最后一行太后是一个换行符:

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

(或者,像你说的,你可以解决它在Linux中,例如用dos2unix 。)



Answer 2:

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

另一种是允许流线而无需额外配置是:

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


文章来源: How to WriteAllLines in C# without CRLF