我希望對Stream所具有的TextReader具有類似的功能。特別是在流中設置位置的能力。有什麼方法可以將TextReader轉換爲流?將文本閱讀器作爲流訪問
我想接受一個TextReader,但是像Stream一樣訪問它。
我希望對Stream所具有的TextReader具有類似的功能。特別是在流中設置位置的能力。有什麼方法可以將TextReader轉換爲流?將文本閱讀器作爲流訪問
我想接受一個TextReader,但是像Stream一樣訪問它。
在一般情況下你不能這樣做。並非所有的TextReader
實例都基於流。
另外,TextReader
基於文本行,其中行結束符可能不是您可以備份的種類。
您可以通過使用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
希望這有助於!
假設您的todo.txt包含一個char **'ş'**(UTF8中的239,187)。如果您將位置設置爲1並嘗試讀取字符,您將得到垃圾。 –
雖然這將與File.OpenText(...)返回的基礎StreamReader類一起使用,但它不適用於所有TextReader對象,如StringReader。我遇到的問題是我想允許任何類型的文本類型的對象,在內存或磁盤上的流。 – galford13x
正確 - 您需要在最初獲取TextReader的地方打開基礎流。 –
Like StreamReader。
關於編碼
StreamReader Constructor (String, Encoding)
關於流
StreamReader Constructor (Stream)
如果你需要接受它作爲一個TextReader的,那麼你是有限的。
你真的只限於TextReader作爲輸入嗎?
在評論你說任何類型的文字。
我看,看起來我必須限制使用流。謝謝我有這種感覺。 – galford13x
您是否正在處理不是單字節字符集的Unicode或其他字符集?如果是這樣,那麼你將無法以簡單的方式做到這一點。 –
我打算添加參數,以便可以指定編碼。我的主要目的是能夠獲取流併爲流中的行編制索引。當然,我必須檢查編碼類型,以確定它是否包含單字節字符或雙字節字符。 – galford13x