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

时间:2012-11-06 12:55:34

标签: c# text save 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);
        }

3 个答案:

答案 0 :(得分:8)

您可能是因为您尝试仅使用以下代码将richTextBox1.Text(全文)保存在一行中

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

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

示例

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(如颜色/字体/保护/缩进/等等),最好将其设置为RichTextBoxStreamType.PlainText

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

RichTextBox.LoadFile(string path, RichTextBoxStreamType);

注意:如果文件不在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);
     }
}

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

答案 1 :(得分:3)

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

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

答案 2 :(得分:0)

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