2011-10-20 58 views
0

試圖找到一種很好的方法來讀取文本文件並找到某個短語的最後一個實例,並從該點開始讀取文件。C#將文本文件從某個位置讀取到EOF

例如簡化

sometext1... 
sometext2... 
[new] 
sometext3... 
[new] 
sometext4... 
sometext5... 
[new] 
sometext6... 
sometext7... 

要我要返回的書面

[new] 
sometext6... 
sometext7... 

我可以想辦法做到這一點的最後一部分,但我敢肯定有一個非常有效的方式。 猜測將不得不找到「[新]」的最後一個索引並從那裏讀取。

+2

你能證明你已經嘗試寫來解決這個問題的任何代碼 – msarchet

+0

如何大的文件?它有多快?這句話總是隻有一行嗎? – svick

+0

下面Jon的sanwser就像我需要的一樣工作。 –

回答

3

假設:

  1. [新]總是在一個線自身。
  2. 沒有一條線很大。
  3. 每個塊都相當小(本身並不是一個巨大的內存負擔)。
  4. 該文件可能非常大,因此您不想將整個內容讀入內存。

然後我會做下面的事情。更改前三個假設,它得到棘手,改變第四,我很懶惰,只是加載了整個事情:

​​
+0

謝謝你工作完美。它只是一個真正簡單的文本文件(日誌記錄),只是想顯示最後一個條目。謝謝。 –

1

您可以打開文件流,將其包裝到TextReader中,然後將Position屬性的值保存到FileStream實例中。它允許您保存[新]令牌的位置。

3
var text = File.ReadAllText(theFile); 
var tail = text.SubString(text.LastIndexOf("[New]")); 
+0

這很接近,但索引僅適用於第1行。未處理換行符和返回字符。 –