从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(); }