2011-03-31 59 views
2

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

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

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

有人可以帮我吗?由于

回答

2
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属性。

+0

谢谢,这个答案似乎工作! – timm 2011-03-31 14:20:43

-1

你试过了吗?

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

但索引是目标数组缓冲区中不在源流中的索引。你的示例代码会溢出数组。 – 2011-03-31 14:17:59

+0

@保罗很好。这就是我没有经过验证就发布的内容。 – cadrell0 2011-03-31 14:20:18

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

的startIndex =从哪里开始
span.Length =字符的数量阅读

+1

但索引是目标数组缓冲区中不在源流中的索引。你的示例代码会溢出数组。 – 2011-03-31 14:15:51

+0

@Paul Ruane是的,你是正确的...但我有一个问题,你的例子..是你使用var offset = 20; ?正如我所看到的那样,你正在寻找流出 – Gabriel 2011-03-31 14:28:46

+0

的好地方。在我意识到“span”应该真的具有抵消作为属性之前,这是一个早期版本的人工产物。 – 2011-03-31 14:33:21