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

Posted

技术标签:

【中文标题】从 RichTextBox 到文本文件,一行一行【英文标题】:From RichTextBox to text files, line after line 【发布时间】:2012-11-06 12:55:34 【问题描述】:

我无法将文件从 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);
        

【问题讨论】:

【参考方案1】:

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

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

建议在richTextBox1 中的特定行号上使用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,最好设置为RichTextBoxStreamType.PlainText,只要不使用颜色/字体/保护/缩进/等RTF...

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

RichTextBox.LoadFile(string path, RichTextBoxStreamType);

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

谢谢, 希望对您有所帮助:)

【讨论】:

【参考方案2】:

我知道这个问题已经很老了,但这里有一个替代代码供将来可能遇到这个问题的人使用

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

【讨论】:

谢谢。它解决了我转换换行符的问题。 避免使用WriteAllLines,如果你有更好的选择,因为它本质上是阻塞的。【参考方案3】:
if (saveFileDialog2.ShowDialog() == DialogResult.OK)

    StreamWriter sw = File.CreateText(saveFileDialog2.FileName);
    foreach(String s in richTextBox1.Lines)
    
        sw.WriteLine(s);
    
    sw.Flush();
    sw.Close();

【讨论】:

它给了我ABC ... SDE ...,然后是另一行KLO ...,但它仍然不是我想要的。这里有什么问题?

以上是关于从 RichTextBox 到文本文件,一行一行的主要内容,如果未能解决你的问题,请参考以下文章

C# richtextbox 添加一行彩色文字

确定在richtextbox中点击了哪一行

labview如何读取文本文档中某一行的字符串

c#richtextbox中选中一行然后编辑

C#,RichTextBox:如何实现逐行滚动?

在java中如何修改文本文件中的某一行的某些数据??