如何从richTextbox读取文本并保留文本的格式?

时间:2017-10-20 22:18:31

标签: c# .net winforms

例如在richTextBox中我有文字:

Hello world
Hello hi

Hi all

现在我想用这种格式读取此文本,包括空行/ s,然后将相同文本写回同一文件,有或没有删除文本或添加文本等更改。

例如,如果我删除all,那么要回写的文本将采用以下格式:

Hello world
Hello hi

Hi 

没有全部 或

Hello world
Hello hi

Hi all everyone

所以现在它会写相同的文字,但是每个人都会保留格式。

我尝试了这个,但这增加了太多以前没有的空行和空格:

var lines = richTextBox1.Text.Split('\n');
File.WriteAllLines(fileName, lines);

然后我尝试了:

var text = richTextBox1.Text;
File.WriteAllText(fileName, text);

这会在文件中写入带有更改的相同文本,但它没有保留将文本写入文件的格式作为一行。

2 个答案:

答案 0 :(得分:0)

您必须将“\ n”替换为“\ r \ n”

var text = richTextBox1.Text;
text = text.Replace("\n", "\r\n");
File.WriteAllText(fileName, text);

答案 1 :(得分:0)

嗯,这里有几个选项,其中没有一个涉及拆分文本。

注意:以下所有代码都使用将文件路径作为字符串的私有变量:

public partial class Form1 : Form
{
    private const string filePath = @"f:\public\temp\temp.txt";

第一个是使用\r\n属性以及TextFile.ReadAllText保存所有文字(包括File.WriteAllText字符):

// Load text on Form Load
private void Form1_Load(object sender, EventArgs e)
{
    if (File.Exists(filePath))
    {
        richTextBox1.Text = File.ReadAllText(filePath);
    }
}

// Save text on button click
private void button1_Click(object sender, EventArgs e)
{
    File.WriteAllText(filePath, richTextBox1.Text);
}

如果您想逐行执行此操作,可以使用File.ReadAllLinesFile.WriteAllLines以及Lines的{​​{1}}属性:

RichTextBox

最后,您可以使用// Load text on Form Load private void Form1_Load(object sender, EventArgs e) { if (File.Exists(filePath)) { richTextBox1.Lines = File.ReadAllLines(filePath); } } // Save text on button click private void button1_Click(object sender, EventArgs e) { File.WriteAllLines(filePath, richTextBox1.Lines); } 类的内置SaveFileLoadFile方法。此方法将元数据写入文件,因此如果您在记事本中打开它,您将看到一些包含各种格式信息的其他字符。因此,我在RichTextBox的调用周围添加了try/catch块,因为如果文件格式不正确,它将抛出异常,然后我回过头来加载{{1} }}:

LoadFile