【发布时间】:2018-09-21 20:29:48
【问题描述】:
我试图将多行 C# 字符串文字写入文件,并注意到字符串文字的行尾始终为 CRLF。
提供更多背景信息:我正在使用 .NET Core 2.1,并且正在 Linux 中构建和运行此示例应用程序。
注意我我没有使用Git,所以这与Git 行尾处理无关。
这是预期的吗?我希望行尾实际上是 LF 而不是 CRLF。
复制代码:
class Program
{
const string script =
@"#!/bin/bash
echo Hello
echo Hi
echo Hey
";
static void Main(string[] args)
{
string text;
if (args.Length > 0)
{
// This gets written as CRLF
text = script;
}
else
{
// This gets written as LF(probably because StringBuilder figures
// in which OS its running and does the right thing)
var sb = new StringBuilder();
sb.AppendLine("#!/bin/bash");
sb.AppendLine("echo Hello");
sb.AppendLine("echo Hi");
sb.AppendLine("echo Hey");
text = sb.ToString();
}
var path = Path.Combine(Path.GetTempPath(), $"{Guid.NewGuid().ToString("N")}.sh");
File.WriteAllText(path, text);
Console.WriteLine($"Text written to {path}");
}
}
更新
仅供有兴趣的人参考...我在这里发布了一个关于此的问题:https://github.com/dotnet/csharplang/issues/1877
【问题讨论】:
-
我猜
\r\n在编译器中是硬编码的。但需要确认。 -
Also this is not a duplicate重复状态Since no exception is made for line endings, you get whatever line endings were used in the source file. As you found out.这感觉与您的问题非常相关。您是如何得出不相关的结论的?