2014-06-04 69 views
2

我有以下代碼:如何在StringReader中重置位置以開始字符串初始化?

StringReader contentReader = new StringReader(this.dataContent.ToString()); 

我分析我的DataContent後,我需要在contentReader的poistion復位到字符串的begining。我該怎麼做?我沒有看到StringReader中的set poistion選項

+1

只是爲了好奇,爲什麼你需要重新定位它的開始? – Steve

回答

8

將它設置爲一個新的StringReader實例。我不相信你可以改變現有的立場。

contentReader = new StringReader(this.dataContent.ToString());

1

另一種選擇是將字符串加載到MemoryStream中,然後使用StreamReader對它進行迭代。 MemoryStream絕對支持位置重置在內存流上。

String data = "Hello! My name it Inigo Montoya."; 
using (MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(data))) 
{ 
    using (StreamReader reader = new StreamReader(stream)) 
    { 
     // Do your parsing here using the standard StreamReader methods. 
     // They should be fairly comparable to StringReader. 

     // When all done, reset stream position to the beginning. 
     stream.Seek(0, SeekOrigin.Begin); 
    } 
} 
+0

您必須在設置流位置後調用'reader.DiscardBufferedData()'。 https://msdn.microsoft.com/en-us/library/system.io.streamreader.discardbuffereddata(v=vs.110).aspx –

+0

@StevenLiekens:'reader.Flush()'是另一種選擇。但是,這兩種方法只在流寫入時才需要。在這種情況下,不需要呼叫。 –

+0

沒有'StreamReader.Flush()'。只有'DiscardBufferedData()'。在尋找之後你必須調用它,因爲如果你不這樣做,讀者會在再次訪問流之前讀取任何緩衝的字節。 –