2012-11-05 65 views
2

我希望對Stream所具有的TextReader具有類似的功能。特別是在流中設置位置的能力。有什麼方法可以將TextReader轉換爲流?將文本閱讀器作爲流訪問

我想接受一個TextReader,但是像Stream一樣訪問它。

回答

4

在一般情況下你不能這樣做。並非所有的TextReader實例都基於流。

另外,TextReader基於文本行,其中行結束符可能不是您可以備份的種類。

+0

我看,看起來我必須限制使用流。謝謝我有這種感覺。 – galford13x

+0

您是否正在處理不是單字節字符集的Unicode或其他字符集?如果是這樣,那麼你將無法以簡單的方式做到這一點。 –

+0

我打算添加參數,以便可以指定編碼。我的主要目的是能夠獲取流併爲流中的行編制索引。當然,我必須檢查編碼類型,以確定它是否包含單字節字符或雙字節字符。 – galford13x

5

您可以通過使用StreamReader類獲取Stream。 StreamReader的是的TextReader的一個子類,所以您可以通過方便地訪問其流特性如下:

TextReader reader = File.OpenText("C:\\todo.txt"); 
    Stream stream = ((StreamReader)reader).BaseStream; 

取決於你需要做什麼,你也可以只使用StreamReader類。

來源:http://msdn.microsoft.com/en-us/library/system.io.streamreader.aspx

希望這有助於!

+1

假設您的todo.txt包含一個char **'ş'**(UTF8中的239,187)。如果您將位置設置爲1並嘗試讀取字符,您將得到垃圾。 –

+0

雖然這將與File.OpenText(...)返回的基礎StreamReader類一起使用,但它不適用於所有TextReader對象,如StringReader。我遇到的問題是我想允許任何類型的文本類型的對象,在內存或磁盤上的流。 – galford13x

+0

正確 - 您需要在最初獲取TextReader的地方打開基礎流。 –