0

几天来,我一直在尝试分块加载文件,以允许用户使用非常大 (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 类中获取数据时,它会引发索引/长度错误。

我需要知道如何在数组中回溯以找到表示行开头的特定字符集,然后仅返回该点之前的数据以处理字符串。

对回溯问题进行排序后的另一个问题是我将如何保留我不想处理的数据并引入更多数据来填充缓冲区。

我希望这能得到很好的解释,我知道我有时会感到困惑,希望有人能提供帮助。

4

1 回答 1

0

我建议在你的循环中使用reader.ReadLine()而不是reader.Read()

buffer=reader.ReadLine();
bytesread = buffer.Length*2;//Each charcter is unicode and equal to 2 bytes

然后您可以检查(toRead - bytesread)是否<0。

于 2013-04-16T14:21:37.547 回答