TextReader并查看下一行

我使用TextReader从文本文件中读取数据

 TextReader reader = new StreamReader(stream); string line; while ((line = reader.ReadLine()) != null) { //....... } 

有时我需要从阅读器中查看下一行( 或下一行 )。

我怎么做?

编辑:更新以允许任意数量的偷看:

 public class PeekingStreamReader : StreamReader { private Queue _peeks; public PeekingStreamReader(Stream stream) : base(stream) { _peeks = new Queue(); } public override string ReadLine() { if (_peeks.Count > 0) { var nextLine = _peeks.Dequeue(); return nextLine; } return base.ReadLine(); } public string PeekReadLine() { var nextLine = ReadLine(); _peeks.Enqueue(nextLine); return nextLine; } } 

你需要自己做; 然而,这并不困难:

 public class PeekTextReader { string lastLine; private readonly TextReader reader; public PeekTextReader(TextReader reader) { this.reader = reader; } public string Peek() { return lastLine ?? (lastLine = reader.ReadLine()); } public string ReadLine() { string res; if (lastLine != null) { res = lastLine; lastLine = null; } else { res = reader.ReadLine(); } return res; } } 

请注意,在执行完整的ReadLine之前,偷看一次将保持线路锁定。

没有可靠的方法在文本阅读器中向后移动阅读位置。 您可以尝试寻找基础流,但可能无法实现(如果流不支持搜索)或者如果在读者内部发生任何类型的缓存,则可能无法提供您想要的结果。

最可行的方法是记住最后一行,你可以考虑创建自定义类,它将使用PeekStringfunction扩展读者……但是如果你需要使用其他读者方法重新读取该字符串,可能很难正确实现。

您可以从文件中读取所有行(ReadAllLines),然后您可以轻松地对它们进行操作。 但是看看文件的大小,你可以使用太多的内存。