C# RichTextBox appendtext有时会添加额外的行?
因此,我试图在不使用LoadFile函数的情况下将文件加载到richtextbox中,因为它不允许您指定编码。我还希望它能够分块加载,这样就不会占用太多内存。我尝试了很多方法,使用二进制读取器、streamreader等,但我认为这是最好的解决方案。不幸的是,无论我做什么,每当我在Notepad++中比较原始文件和加载的文件时,文本文件中似乎总是有多余的行。我认为读取文件有问题,我做了一个测试来找出问题所在。我有输入文件流和输出文件,它们完全相同!但是,当我在richtextbox中添加文本时,会出现一些额外的行 代码如下:C# RichTextBox appendtext有时会添加额外的行?,c#,.net,winforms,text,richtextbox,C#,.net,Winforms,Text,Richtextbox,因此,我试图在不使用LoadFile函数的情况下将文件加载到richtextbox中,因为它不允许您指定编码。我还希望它能够分块加载,这样就不会占用太多内存。我尝试了很多方法,使用二进制读取器、streamreader等,但我认为这是最好的解决方案。不幸的是,无论我做什么,每当我在Notepad++中比较原始文件和加载的文件时,文本文件中似乎总是有多余的行。我认为读取文件有问题,我做了一个测试来找出问题所在。我有输入文件流和输出文件,它们完全相同!但是,当我在richtextbox中添加文本时,
const int bufferSize = 16384;
using (FileStream fileStream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read, bufferSize, FileOptions.SequentialScan))
{
using (FileStream outStream = File.Create(@"C:\Users\me\Desktop\file comparison.txt"))
{
int bytesRead;
byte[] buffer = new byte[bufferSize];
while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) > 0)
outStream.Write(buffer, 0, bytesRead);
}
}
//Result:
//The 2 files are the same
using (FileStream fileStream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read, bufferSize, FileOptions.SequentialScan))
{
int bytesRead;
byte[] buffer = new byte[bufferSize];
while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) > 0)
{
if (bytesRead != bufferSize)
Array.Resize(ref buffer, bytesRead); //On the last chunk if the file is not a multiple of bufferSize (16384), it will leave some parts of the previous chunk behind
richTextBox.AppendText(Encoding.UTF8.GetString(buffer));
}
}
//Result:
//When I copy and paste into notepad++ and compare the original and this, there are a few extra lines (empty lines)
有人知道怎么了吗?
谢谢。您不能以那种方式使用
Encoding.X.GetString()
。也许用它来代替。它也没用,因为你无论如何都要把那个文件加载到内存中。顺便说一句,有一个接受流的重载,但我以为我是将文件分块加载到内存中?编码文本有特定的字节边界。您无法读取一个通用字节块并希望从中返回一个完整格式的字符串。您必须到达线边界(用\n
(0x10
)或\r\n
(0x13;0x10
)标记)。但是,如果最终还是将整个文件加载到内存中,这是毫无意义的。如果要实现某种分页,必须一次读取多行,可能需要缓冲这些行。看这个例子,它是类似的。好的,非常感谢。我将尝试一次读取更多行,比如一次读取50行。您好,我只是想知道,如何使用richtextbox.LoadFile指定编码?