2011-03-31 53 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