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),然后您可以轻松地对它们进行操作。 但是看看文件的大小,你可以使用太多的内存。