我试图将多行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
答案 0 :(得分:0)
我在https://github.com/dotnet/csharplang/issues/1877此处发布了与此相关的问题,看来这是预期的行为。
以上问题讨论了使用另一种机制来理解行尾的编写方法:Writing Unix style text file in C#
但是正如我所here所指出的那样,它不适用于C#多行字符串,因此在我的情况下,我不得不使用Replace("\r\n", "\n")
。
答案 1 :(得分:-4)
您应该改用Environment.NewLine。