将文件加载/传输到缓冲区/缓冲区

时间:2013-04-16 13:59:05

标签: c# buffer filestream streamreader seek

我现在已经尝试了几天以块的形式加载文件,以允许用户使用非常大的(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类中获取数据时会出现索引/长度错误。

我需要知道如何在数组中寻找一个代表一行开头的特定字符集,然后只返回该点之前的数据以便处理成字符串。

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

我希望这个解释得很好,我知道我有时候可能会混淆希望有人可以提供帮助。

1 个答案:

答案 0 :(得分:0)

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

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

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