我有一个方法,它可以使用StringReader实例(从剪贴板读取)或StreamReader实例(从文件读取),并且目前将任一类型转换为TextReader实例。

我需要它来“预读”一些源输入,然后将光标重置回开始。我不一定具有原始文件名。我该怎么做?

提到了SeekSystem.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/

10-09 19:52