如何在 C# 中使用 streamwriter 编写已经具有换行符的字符串?

How to write strings which is already have new line character using streamwriter in C#?

我有一个字符串,在某些部分有 \n 字符。我想将该字符串写入文本文件。我尝试了 streamwriter 的 Write 和 WriteLine 方法,并且在这两种方法中它都写在一行中。那么,有没有什么简单的方法可以使用换行符来编写这个字符串,或者应该用 \n 字符将它拆分成数组。

Microsoft.Win32.SaveFileDialog sfd = new Microsoft.Win32.SaveFileDialog();
        sfd.Filter = "g-code|*.gcode;";
        if (sfd.ShowDialog() == true)
        {
            string path = System.IO.Path.GetFullPath(sfd.FileName);
            System.IO.StreamWriter writer = new System.IO.StreamWriter(sfd.OpenFile());
            writer.Write(GcodeTxt);
            writer.Dispose();
            writer.Close();
            MessageBox.Show("File is saved.", "Saved", MessageBoxButton.OK, MessageBoxImage.Information);
        }

示例 GcodeTxt:"G21;metric is good!\n G90 ;absolute positioning\n T0 ;select new extruder\n G28 ;go home\n G92 E0 ;set extruder home\n M104 S73.0 ;set temperature\n"

结果是;

您的 GcodeTxt 可能将 \n 格式化为常规字符串而不是特殊字符。即使您将 \r\n 添加到文本中,它也只会被格式化为常规字符串字符。

使用 Environment.NewLine 而不是 \n 进行跨环境换行: (@"G21;metric is good!" + Environment.NewLine + @" G90 ;...

修复字符串中的行分隔符以匹配平台的预期。 Windows 预计 \r\n。使用 Environment.NewLine 而不是 "\n"。您的字符串生成方式有误。修复它的构建方式。

以上答案准确无误。但是,当您要插入换行符时,您还应该考虑使用 StreamWriter.WriteLine 而不是 StreamWriter.Write

https://msdn.microsoft.com/en-us/library/system.io.streamwriter.writeline(v=vs.110).aspx

Windows 记事本只读取 CrLf (Carriage return + Line feed) 行结尾,即 \r\n。如果您只输入一个换行符 (\n),那么记事本会将其呈现为就好像它是在一行中写的一样。

尝试在 Notepad++ 之类的软件中打开文件,它应该看起来像您想要的那样。

要编写回车符 return + 换行符,请改用 Environment.NewLine