所以我正在做一个项目,在其中读取配置文件。配置文件只是一个字符串列表,例如“ D 1 1”,“ C 2 2”等。现在我从未用C#进行过读/写操作,因此我在网上查找了一下,希望找到某种形式的再现C / C ++ .eof()的代码。我找不到一个。
所以我有...
TextReader tr = new StreamReader("/mypath");
在我发现如何将所有示例连续读取到文件末尾的所有在线示例中
while ((line = tr.ReadLine() != null)
或
while (tr.Peek() >= 0)
我注意到StreamReader有一个bool EndOfStream,但是没有人建议这样做,这使我相信该解决方案有问题。我最终尝试这样...
while (!(tr as StreamReader).EndOfStream)
它似乎可以正常工作。
所以我想我的问题是,将TextReader强制转换为StreamReader并检查EndOfStream会遇到问题吗?
一个明显的缺点是,它使您的代码StreamReader
是特定的。鉴于您can仅使用TextReader
轻松编写代码,为什么不这样做呢?这样,如果您需要使用StringReader
(或类似的东西)进行单元测试等,就不会有任何困难。
我个人总是使用“读取一行直到它为空”的方法-有时通过扩展方法,以便我可以使用]]
foreach (string line in reader.EnumerateLines()) { }
EnumerateLines
随后将是使用迭代器块在TextReader
上的扩展方法。 (这意味着您也可以轻松地将它用于LINQ等。)
或者您可以使用ReadAllLines
来简化代码:
不,您不会遇到任何问题。如果查看EndToStream的实现,您会发现它只是检查缓冲区中是否还有数据,如果没有,是否可以从基础流中读取更多数据:
也许全部读入一个字符串然后解析:StreamReader.ReadToEnd()
Well,StreamReader是TextReader的特化。因此应该没有问题。 :)
var arpStream = ExecuteCommandLine(cmd, arg);
arpStream.ReadLine(); // Read entries
while (!arpStream.EndOfStream)
{
var line1 = arpStream.ReadLine().Trim();
// TeststandInt.SendLogPrint(line, true);
}