【问题标题】:Read only a specified span只读指定范围
【发布时间】:2011-07-26 22:42:00
【问题描述】:

我有一个文本文件,我只想从中读取指定范围(如位置 20 到 80)。

我正在使用下面的代码,但它从 0 读取到跨度的长度。

char[] buffer = new char[span.Length];
using (StreamReader reader = new StreamReader(filename))
{               
    reader.ReadBlock(buffer, 0, span.Length);
}

有人可以帮助我吗?谢谢

【问题讨论】:

    标签: c# .net wpf stream


    【解决方案1】:
    char[] buffer = new char[span.Length];
    using (StreamReader reader = new StreamReader(filename))
    {    
        reader.BaseStream.Seek(span.Start, SeekOrigin.Begin); // or SeekOrigin.Current if you want to loop
        reader.Read(buffer, 0, span.Length);
    }
    

    假设span 的类型有一个Start 属性。

    【讨论】:

      【解决方案2】:
      char[] buffer = new char[span.Length];
      using (StreamReader reader = new StreamReader(filename))
      {               
          reader.ReadBlock(buffer, startIndex, span.Length);
      }
      

      startIndex= 从哪里开始
      span.Length = 要读取的字符数

      【讨论】:

      • 但索引是目标数组缓冲区中的索引,而不是源流中的索引。您的示例代码会溢出数组。
      • @Paul Ruane 是的,你是对的......但我对你的例子有一个问题......你是否使用 var offset = 20; ?正如我所看到的,您正在寻找流的开始
      • 好地方。这是在我意识到span 真正应该将偏移量作为属性之前的早期版本的产物。
      【解决方案3】:

      你试过了吗?

      char[] buffer = new char[span.Length];
      using (StreamReader reader = new StreamReader(filename))
      {               
          reader.ReadBlock(buffer, 20, span.Length);
      }
      

      【讨论】:

      • 但索引是目标数组缓冲区中的索引,而不是源流中的索引。您的示例代码会溢出数组。
      • @Paul 很好。这就是我在未经验证的情况下发布的结果。
      猜你喜欢
      • 2021-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多