我有以下代碼:如何在StringReader中重置位置以開始字符串初始化?
StringReader contentReader = new StringReader(this.dataContent.ToString());
我分析我的DataContent後,我需要在contentReader的poistion復位到字符串的begining。我該怎麼做?我沒有看到StringReader中的set poistion選項
我有以下代碼:如何在StringReader中重置位置以開始字符串初始化?
StringReader contentReader = new StringReader(this.dataContent.ToString());
我分析我的DataContent後,我需要在contentReader的poistion復位到字符串的begining。我該怎麼做?我沒有看到StringReader中的set poistion選項
將它設置爲一個新的StringReader實例。我不相信你可以改變現有的立場。
contentReader = new StringReader(this.dataContent.ToString());
也看到了類似的問題: How do you reset a C# .NET TextReader cursor back to the start point?
但正如馬修說,該解決方案可能是簡單地創建一個新的。
另一種選擇是將字符串加載到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);
}
}
您必須在設置流位置後調用'reader.DiscardBufferedData()'。 https://msdn.microsoft.com/en-us/library/system.io.streamreader.discardbuffereddata(v=vs.110).aspx –
@StevenLiekens:'reader.Flush()'是另一種選擇。但是,這兩種方法只在流寫入時才需要。在這種情況下,不需要呼叫。 –
沒有'StreamReader.Flush()'。只有'DiscardBufferedData()'。在尋找之後你必須調用它,因爲如果你不這樣做,讀者會在再次訪問流之前讀取任何緩衝的字節。 –
只是爲了好奇,爲什麼你需要重新定位它的開始? – Steve