[英]Writing C# multi-line string literal to a file and CRLF line ending
我试图将多行 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/do.net/csharplang/issues/1877
我在这里https://github.com/dotnet/csharplang/issues/1877发布了与此相关的问题,看来这是预期的行为。
上面的问题讨论了如何使用另一种机制来理解编写行尾的方法: 在C#中编写Unix样式的文本文件
但是,正如我在这里指出的那样,它不适用于C#多行字符串,因此在我的情况下,我不得不使用Replace("\\r\\n", "\\n")
。
答案同https://stackoverflow.com/a/48196962/771768
如果您的 C# 源文件有 CRLF 结尾,多行字符串将有 CRLF。
如果源文件有 LF 结尾,则字符串将有 LF。
如果您的源文件混合了 LF 和 CRLF,则该字符串将具有混合的 LF 和 CRLF 结尾。 但其他开发者会合理地抱怨这会让人感到困惑。
您应该改用Environment.NewLine。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.