16

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

4

2 回答 2

38

假设您仍然需要换行符,您只需要换行而不是回车/换行,您可以使用:

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

或者如果您也确实想要在最后一行之后换行:

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

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

于 2012-06-11T22:35:54.577 回答
5

@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);
        }
    }
}
于 2018-07-17T09:48:10.913 回答