如何将C#.NET TextReader光标重置回起点?

Bre*_*dan 24 .net c# file

我有一个方法,它接受一个StringReader实例(从剪贴板读取)或一个StreamReader实例(从文件中读取),并且目前,将一个TextReader实例转换为实例.

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

还有就是提到Seek的方法System.IO.Stream,但是这不是在实施TextReader,虽然是StreamReader通过Basestream财产.但是StringReader没有BaseStream财产

Jon*_*eet 37

这取决于TextReader.如果是a StreamReader,你可以使用:

sr.BaseStream.Position = 0;
sr.DiscardBufferedData();
Run Code Online (Sandbox Code Playgroud)

(当然,假设基础流是可搜索的.)

的其他实现TextReader可能不会 "倒带"的概念,在以同样的方式IEnumerable<T>却没有.在许多方面,你可以认为TextReader是一个美化IEnumerable<char>.它有方法一次读取整个数据块,读取行等,但它基本上是一种"前向读取"类型.

编辑:我不相信StringReader支持任何类型的倒带 - 如果可以,你最好StringReader从原始字符串重新创建.如果这不可行,您可以始终创建自己的TextReader类,代理对另一个的所有"正常"调用StringReader,但在需要时重新创建该代理实例.


Mar*_*ell 10

如果它是一个StreamReader,而如果该流求支持,则:

        reader.BaseStream.Seek(0, SeekOrigin.Begin);
        reader.DiscardBufferedData();
Run Code Online (Sandbox Code Playgroud)

但是,这在任意TextReaders 上是不可能的.您也许可以将其全部读作字符串,然后可以StringReader反复使用?