我已经尝试了几天了,现在以块加载文件,以允许用户使用非常大(GB)的文件,仍然保持程序的速度。目前我有以下代码:
using (FileStream filereader = new FileStream(filename, FileMode.Open, FileAccess.Read))
{
using (StreamReader reader = new StreamReader(filereader))
{
while (toRead > 0 && (bytesread = reader.Read(buffer, offset, toRead)) > 0)
{
toRead -= bytesread;
offset += bytesread;
}
if (toRead > 0) throw new EndOfStreamException();
foreach (var item in buffer)
{
temporary = temporary += item.ToString();
}
temporary.Replace("n", "n" + System.Environment.NewLine);
下面是为了避免混淆的声明(希望如此):
const int Max_Buffer = 5000;
char[] buffer = new char[Max_Buffer];
int bytesread;
int toRead = 5000;
int offset = 0;
此时程序读取5000字节的文本文件,然后将这些字节处理成一个字符串,然后将该字符串传递给stringreader,以便我可以获取我想要的信息。
我现在的问题是缓冲区可以在一行中途停止,所以当我在stringreader类中获取数据时,它会带来索引/长度错误。
我需要的是知道如何在数组中寻找一组特定的字符,这些字符表示一行的开始,然后只返回在该点之前的数据进行处理到字符串。
排序后的另一个问题是,我如何保留我不想处理的数据,并引入更多的数据来填充缓冲区。
我希望这是解释好,我知道我有时可以混淆希望有人可以帮助。
我建议在循环中使用reader.ReadLine()而不是reader.Read()
buffer=reader.ReadLine();
bytesread = buffer.Length*2;//Each charcter is unicode and equal to 2 bytes
您可以检查是否(toRead - bytesread)<0.