如何快速将文本文件加载到RichTextBox?

6

我使用OpenFileDialog将文本文件加载到RichTextBox中。但是当有大量文本(例如约50-70行的歌词)时,当我点击“打开”时,程序会挂起几秒钟(约3-5秒)。这是正常现象吗?也许有一些更快的方法或组件可以加载文本文件?如果我的问题不合适,请删除它。谢谢。

if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
        {
            string text = File.ReadAllText(openFileDialog1.FileName);
            for (int i = 0; i < text.Length - 1; i++)
            {
                richTextBox1.Text = text;
            }
        }

我猜可能是ReadAllLines导致这个问题?


1
你能否发布一下你用来读取文件并填充richtextbox的代码? - digEmAll
当然可以。已更新。 - Frankie Drake
4个回答

7

有一个类似的问题涉及读写文件的最快方法:在.NET中读写磁盘的最快方式是什么?

然而,50-70行代码真的不算多...无论你如何阅读,它应该立即显示。你可能从网络共享或其他引起延迟的地方读取吗?

编辑: 既然我看到了你的代码:删除循环,只需一次性编写richTextBox1.Text = text;。在循环中分配字符串没有意义,因为你已经通过使用ReadAllText读取了完整的文件内容。

if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK) {
    string text = File.ReadAllText(openFileDialog1.FileName);
    richTextBox1.Text = text;
}

谢谢,我不知道,也许是我的 Pentium IV 太弱了,或者 ReadAllLines 处理速度太慢了。 - Frankie Drake
非常感谢。我刚刚明白循环是不合适的!所有答案都非常有帮助。谢谢。 - Frankie Drake

6
void LoadFileToRTB(string fileName, RichTextBox rtb)
{
      rtb.LoadFile(File.OpenRead(fileName), RichTextBoxStreamType.PlainText); // second parameter you can change to fit for you
      // or
      rtb.LoadFile(fileName);
      // or
      rtb.LoadFile(fileName, RichTextBoxStreamType.PlainText); // second parameter you can change to fit for you
}

2

移除for循环,因为它是无用的:

string text = File.ReadAllText(openFileDialog1.FileName);
richTextBox1.Text = text;

text是一个包含文件所有文本的字符串,需要传递给textBox。

操作:

for(int i=0, i < text.Lengt-1; i++)
    richTextBox1.Text = text;

你正在将从文件中读取的文本text.Length-1次分配(Length是字符串的字符数),这是无用的。


(您需要将文本从英语翻译成中文。)

谢谢,这个是无用的,看起来很荒谬。 - Frankie Drake

0
if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
    richTextBox1.Text = File.ReadAllText(openFileDialog1.FileName);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接