2012-07-23 64 views
0

我正在處理一個非常大的文件。我正在談論的技嘉大。如何從特定位置讀取一行字符串

我需要能夠從一個特定的索引讀取一行,因爲文本文件一直在更新。實現這個目標的最快解決方案是什麼?我完全不受空間要求的限制。

編輯:發佈了更詳細的信息。假設我有以下需要閱讀的文字:

Jun 21 09:47:53 ez-x5 user.debug if_comm: [TX] 30 40 05 
Jun 21 09:47:53 ez-x5 user.debug if_comm: [RX] 04 
Jun 21 09:47:53 ez-x5 user.debug if_comm: [TX] 30 40 05 
Jun 21 09:47:54 ez-x5 user.debug if_comm: [RX] 02 30 40 0f 30 32 31 23 64 31 30 32 30 64 64 49 49 49 49 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 03 0b 

這個文本文件一直由我們的記錄器更新。當文本文件得到更新時,我需要讀取附加到日誌的新行(用\ n分隔)。

+0

什麼是「一條線」?任何行?下一個序列?按行號?另外,你的「特定指數」是什麼? – Cameron 2012-07-23 06:51:57

回答

1

使用FileStream對象,您可以通過更改Position屬性來在文件中隨機訪問。

請參閱here

設置位置時,它會尋找到流中的位置,因此您需要提前知道要開始查找的文件的位置。

0

使用lineCounter變量並在閱讀StreamReader.ReadLine()時增加它。當你到達一個特定的索引(即lineCounter==SpecificIndex),然後停止閱讀。

+0

如何?當文本文件被更新時,我需要閱讀新行。就我而言,一旦你想再次開始閱讀文件,你將不得不再次從索引0讀取數據。 – l46kok 2012-07-23 06:54:28

+0

如果你的文本文件是* small *,但是在這種情況下(大文本文件),我會建議使用'File.ReadAllLines'(我認爲)要使用* counter *。 – adatapost 2012-07-23 06:58:32

0

通過使用MemoryMappedFile,您可以將文件的一部分映射到您的內存中(因此您不需要讀取完整文件)。通過將其與FileSystemWatcher相結合,您應該能夠獲得相當好的解決方案。