我有一个方法,它可以使用StringReader
实例(从剪贴板读取)或StreamReader
实例(从文件读取),并且目前将任一类型转换为TextReader
实例。
我需要它来“预读”一些源输入,然后将光标重置回开始。我不一定具有原始文件名。我该怎么做?
提到了Seek
的System.IO.Stream
方法,但这不是在TextReader
中实现的,尽管它是通过StreamReader
属性在Basestream
中实现的。但是StringReader
没有BaseStream
属性
最佳答案
这取决于TextReader
。如果是StreamReader
,则可以使用:
sr.BaseStream.Position = 0;
sr.DiscardBufferedData();
(当然,假设底层流是可搜索的。)
TextReader
的其他实现可能不像IEnumerable<T>
那样具有“倒带”的概念。在许多方面,您都可以将TextReader
视为美化的IEnumerable<char>
。它具有一次读取全部数据块,读取行等的方法,但从根本上讲,它是“正向读取”类型。编辑:我不相信
StringReader
支持任何形式的倒带-如果可以的话,最好从原始字符串重新创建StringReader
。如果这不可行,则可以始终创建自己的TextReader
类,该类将对所有“常规”调用的代理代理到另一个StringReader
,但是在需要时重新创建该代理实例。关于c# - 如何将C#.NET TextReader游标重设回起点?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/831417/