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

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

我的richtextbox看起来像这样;

ABC ... SDE ... KLO ... 

我保存后看起来像这样:

 ABC ... SDE ... KLO ... 

但我希望像行后的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); } 

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

 StreamWriter sw = File.CreateText(saveFileDialog2.FileName); sw.WriteLine(richTextBox1.Text); sw.Flush(); sw.Close(); 

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

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

另一个方案


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

 RichTextBox.SaveFile(string path, RichTextBoxStreamType); 

其中path表示代码中的saveFileDialog2.FileName 。 对于RichTextBoxStreamType ,只要不使用RTF(如Color / Font / Protection / Indent / etc等),最好将其设置为RichTextBoxStreamType.PlainText

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

 RichTextBox.LoadFile(string path, RichTextBoxStreamType); 

注意:如果文件不在RTF中并且您尝试在RTF中读取它( RichTextBox.LoadFile(string path, RichTextBoxStreamType.RichText); )您可能会遇到格式错误。 在这种情况下,您需要捕获exception并以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); } } 

谢谢,
我希望你觉得这有用 :)

我知道这个问题已经很老了,但是对于那些可能在将来遇到这个问题的人来说,这是一个替代代码

File.WriteAllLines(saveFileDialog1.FileName, richTextBox1.Lines);

 if (saveFileDialog2.ShowDialog() == DialogResult.OK) { StreamWriter sw = File.CreateText(saveFileDialog2.FileName); foreach(String s in richTextBox1.Lines) { sw.WriteLine(s); } sw.Flush(); sw.Close(); }