将文件加载/流式传输到一个/多个缓冲区



我已经尝试了几天了,现在以块加载文件,以允许用户使用非常大(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.

相关内容

  • 没有找到相关文章

最新更新