【问题标题】:AppendText only works with large stringsAppendText 仅适用于大字符串
【发布时间】:2020-04-18 21:50:05
【问题描述】:

所以我正在尝试将文件加载到富文本框中,但我遇到了一些问题。无论我使用什么方法,binaryreader、filestream、streamreader,我总是遇到将文件分块加载到 Richtextbox 中的问题。 (我不能使用 LoadFile,因为它不允许我指定编码)。似乎如果缓冲区太小,小于 3MB,AppendText 有时会添加一些额外的空行。该文件本身不会丢失任何数据,只是附加了几行。这是我正在使用的代码:

richTextBox.Clear();
            progressBar.Value = 0;
            const int bufferSize = 1024 * 1024 * 3; //I've tried smaller buffers but they ALL seem to append a few extra lines (empty lines)

            using (StreamReader streamReader = new StreamReader(path))
            {
                while (streamReader.Peek() != -1)
                {
                    char[] buffer = new char[bufferSize];
                    await streamReader.ReadBlockAsync(buffer, 0, bufferSize);
                    richTextBox.AppendText(new string(buffer));
                    progressBar.Value = (int)(((double)streamReader.BaseStream.Position) / streamReader.BaseStream.Length * 100);
                }
            }

这段代码似乎可以工作,但我很怀疑它有时仍会根据情况附加额外的行。有人知道为什么会发生这种情况吗?

*额外问题 使用 StreamReader 是否比 FileStream 或 binaryreader 慢? 我应该使用 readblock 还是 read?

【问题讨论】:

  • 关于额外的问题:除非你真的需要性能(在这种情况下你可能使用了错误的语言),我不会太担心性能跨度>
  • 也许源文件有这些额外的行。
  • 不,我将richtextbox中的文本复制到notepad++中,并保存文件,然后对它们执行sha256哈希。他们是不同的。

标签: c# .net winforms append richtextbox


【解决方案1】:

这是您可以使用的简单方法;它提供与文件相同的格式:

OpenFileDialog fil = new OpenFileDialog();
if (fil.ShowDialog()== DialogResult.OK)
{
    richTextBox1.Clear();
    richTextBox1.Text = File.ReadAllText(fil.FileName);                
}

【讨论】:

  • 谢谢,但我正在尝试分块加载文件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多