C#.NETTextReader如何将光标重置回起点?我有一种方法采用StringReader实例(从剪贴板读取)或StreamReader实例(从文件读取),目前,将一个实例转换为TextReader实例。我需要它来“预读”一些源输入,然后将光标重置回开头。我不一定有原始文件名。我应该怎么办?提到了System.IO.Stream的Seek方法,但这在TextReader中并没有实现,虽然在StreamReader中是通过Basestream属性实现的。但是StringReader没有依赖于TextReader的BaseStream属性。如果是StreamReader,可以使用:sr.BaseStream.Position=0;sr.DiscardBufferedData();(当然,假设底层流是可搜索的。)TextReader的其他实现可能没有“倒带”的概念,例如IEnumerable之类的。在许多方面,您可以将TextReader视为美化的IEnumerable。它有一次性读取整个数据块、读取行等方法,但它基本上是一种“预读”类型。编辑:我不相信StringReader支持任何类型的倒带——如果可以的话,最好从原始字符串重新创建StringReader。如果那不可行,您始终可以创建自己的TextReader类,代理对另一个StringReader的所有“正常”调用,但在需要时重新创建该代理实例。如果它是一个StreamReader,并且流支持搜索,那么:reader.BaseStream.Seek(0,SeekOrigin.Begin);reader.DiscardBufferedData();但是,这在任意TextReader上是不可能的。您可能能够将其全部作为字符串读取,然后您可以重用StringReader吗?我看到了你的帖子,很沮丧,因为这是不可能的。我很快破解了一些有用的东西:完全避免使用stringreader:Streamstream=newMemoryStream((newSystem.Text.ASCIIEncoding().GetBytes(mystring)),false);reader=newStreamReader(stream,newSystem.Text.ASCIIEncoding());它不漂亮,它使用ASCII(这是我需要的)。请注意,这在使用不同的编码时不起作用,因为您将寻找不等于第n个字符的第n个字节。如果你真的需要,你可以做一些像Streamstream=newMemoryStream((newSystem.Text.UTF32Encoding().GetBytes(mystring)),false);reader=newStreamReader(stream,newSystem.Text.UTF32Encoding());因为UTF32是唯一固定长度的unicode格式。你现在可以做reader.BaseStream.Position=wherever;//或者对于UTF32类型的任何地方*4,//在你的例子中,字符串的开头,//显然总是0reader.DiscardBufferedData();寻求,你会发现。寻求(0,SeekOrigin.Begin);TextReader派生自StreamReader。StreamReader包含BaseStream属性。以上就是C#学习教程:如何让C#.NETTextReader的光标重新回到起点?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
