从RichTextBox到文本文件,一行一行

Uni*_* Le 0 c# text save richtextbox

我将文件从Richtextbox保存到文本文件时遇到问题.

我的richtextbox看起来像这样;

ABC    ...
 SDE   ...
KLO    ...
Run Code Online (Sandbox Code Playgroud)

我保存后看起来像这样:

ABC ... SDE ... KLO ...
Run Code Online (Sandbox Code Playgroud)

但我希望像行后的richtextbox一样.我做错了什么?

 if (saveFileDialog2.ShowDialog() == DialogResult.OK)
        {
            StreamWriter sw = File.CreateText(saveFileDialog2.FileName);
            sw.WriteLine(richTextBox1.Text);
            sw.Flush();
            sw.Close();

            //File.WriteAllText(saveFileDialog2.FileName, str);
        }
Run Code Online (Sandbox Code Playgroud)

Pic*_*are 8

你可能得到这个,因为你试图richTextBox1.Text仅使用以下代码将(整个文本)保存在一行中

StreamWriter sw = File.CreateText(saveFileDialog2.FileName);
sw.WriteLine(richTextBox1.Text);
sw.Flush();
sw.Close();
Run Code Online (Sandbox Code Playgroud)

建议sw.WriteLine()在特定的行号上使用,richTextBox1然后移到另一行.

for (int i = 0; i < richTextBox1.Lines.Length; i++)
{
    sw.WriteLine(richTextBox1.Lines[i]);
}
sw.Flush();
sw.Close();
Run Code Online (Sandbox Code Playgroud)

另一种方案


已经有一个内置函数RichTextBox来保存具有特定编码的文件.您可以RichTextBox.SaveFile()为此目的使用.

RichTextBox.SaveFile(string path, RichTextBoxStreamType);
Run Code Online (Sandbox Code Playgroud)

在代码中path代表saveFileDialog2.FileName的位置.因为RichTextBoxStreamType,RichTextBoxStreamType.PlainText只要你不使用RTF,如颜色/字体/保护/缩进/等等,最好将其设置为...

然后,您可以使用以下方法再次读取该文件

RichTextBox.LoadFile(string path, RichTextBoxStreamType);
Run Code Online (Sandbox Code Playgroud)

注意:如果文件不在RTF中并且您尝试在RTF(RichTextBox.LoadFile(string path, RichTextBoxStreamType.RichText);)中读取它,则可能会遇到格式错误.在这种情况下,您需要捕获异常并以Plain或Unicode编码方式读取文件.

RichTextBox _RichTextBox = new RichTextBox();
try
{
     _RichTextBox.LoadFile(@"D:\Resources\text.txt", RichTextBoxStreamType.RichText);
}
catch (Exception EX)
{
     if (EX.Message.ToLower().Contains("format is not valid"))
     {
          _RichTextBox.LoadFile(@"D:\Resources\text.txt", RichTextBoxStreamType.PlainText);
     }
}
Run Code Online (Sandbox Code Playgroud)

谢谢,
我希望你觉得这很有帮助:)