2014-01-16 119 views
-4

我有以下代碼:在哪裏使用StreamReader.DiscardBufferedData()?

StreamReader StreamReader = new StreamReader("File.txt"); 
string Line = ""; 

while((Line = StreamReader.ReadLine()) != null) 
{ 
    string Value = Line.Trim(); 
    string Value2 = StreamReader.ReadLine(); 
    int CursorValue = StreamReader.BaseStream.Position; 

    if(Condition) 
    { 
     StreamReader.BaseStream.Position = SOMETHING_ELSE; 
     Console.WriteLine(StreamReader.ReadLine()); 
    } 

    StreamReader.BaseStream.Position = CursorValue; 
} 

可有人告訴我,我應該在這裏使用StreamReader.DiscardBufferedData()

+9

的http://元。 stackexchange.com/questions/10647/how-do-i-write-a-good-title –

+2

你想做什麼? [File.ReadAllText](http://msdn.microsoft.com/en-us/library/system.io.file.readalltext(v = vs.110).aspx)有什麼問題? –

+3

如果他們僅在['DiscardBufferedData'](http://msdn.microsoft.com/zh-cn/library/system.io.streamreader.discardbuffereddata(v = vs.110))的文檔頁上給出了使用示例,的.aspx)。哦,等等,他們會。 –

回答

4

從MSDN:

使用DiscardBufferedData方法來重置StreamReader對象內部緩衝器。只有當內部緩衝區和BaseStream的位置不匹配時才需要調用此方法。

那麼一個小例子:

Stream s = new MemoryStream(); 
StreamReader sr = new StreamReader(s); 
// Read things here. 
s.Position = 10; 
sr.DiscardBufferedData();  // reader now reading from position 0 
sr.BaseStream.Seek(10, SeekOrigin.Begin); // Reader now reading from location 10. 

你的情況:

StreamReader.BaseStream.Position = SOMETHING_ELSE; 
sr.DiscardBufferedData(); 
StreamReader.BaseStream.Seek(SOMETHING_ELSE, SeekOrigin.Begin); 
Console.WriteLine(StreamReader.ReadLine()); 

不要忘記在重新設置回:

StreamReader.BaseStream.Position = CursorValue; 
sr.DiscardBufferedData(); 
StreamReader.BaseStream.Seek(CursorValue, SeekOrigin.Begin); 
1

MSDN

使用DiscardBufferedData方法重置內部緩衝器爲 StreamReader對象。只有當內部緩衝區的 位置與BaseStream不匹配時,才需要調用此方法。這些 位置可能會在您將數據讀入緩衝區時不匹配,然後在基礎流中尋找新的位置。此方法的性能會降低,並且只能在絕對必要時才使用,例如 ,當您想多次讀取StreamReader對象的部分內容時。有關常見I/O任務的列表,請參見通用I/O 任務。