jar*_*red 12 c# file-io line-endings system.io.file
我正在使用C#并尝试输出几行到ASCII文件.我遇到的问题是我的Linux主机看到这些文件:
ASCII text, with CRLF line terminators
Run Code Online (Sandbox Code Playgroud)
我需要这个文件只是:
ASCII text
Run Code Online (Sandbox Code Playgroud)
CRLF引起了一些问题,我希望在C#中有一种方法可以创建以我想要的方式格式化的文件.
我基本上使用这段代码:
string[] lines = { "Line1", "Line2" };
File.WriteAllLines(myOutputFile, lines, System.Text.Encoding.UTF8);
Run Code Online (Sandbox Code Playgroud)
是否有一种简单的方法来创建没有CRLF行终止符的文件?我可以在Linux方面处理它,但宁愿从一开始就以适当的格式创建文件.
Jon*_*eet 30
假设你仍然想要换行,你只需要换行而不是回车/换行,你可以使用:
File.WriteAllText(myOutputFile, string.Join("\n", lines));
Run Code Online (Sandbox Code Playgroud)
或者如果你肯定也希望在最后一行之后换行:
File.WriteAllText(myOutputFile, string.Join("\n", lines) + "\n");
Run Code Online (Sandbox Code Playgroud)
(或者,正如您所说,您可以在Linux端修复它,例如使用dos2unix.)
@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);
}
}
}
Run Code Online (Sandbox Code Playgroud)