繁体   English   中英

将 C# 多行字符串文字写入文件和 CRLF 行结尾

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM