使用StreamReader.EndOfStream的问题?

问题描述 投票:3回答:6

所以我正在做一个项目,在其中读取配置文件。配置文件只是一个字符串列表,例如“ 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会遇到问题吗?

c# .net file-io streamreader textreader
6个回答
5
投票

一个明显的缺点是,它使您的代码StreamReader是特定的。鉴于您can仅使用TextReader轻松编写代码,为什么不这样做呢?这样,如果您需要使用StringReader(或类似的东西)进行单元测试等,就不会有任何困难。

我个人总是使用“读取一行直到它为空”的方法-有时通过扩展方法,以便我可以使用]]

foreach (string line in reader.EnumerateLines())
{
}

EnumerateLines随后将是使用迭代器块在TextReader上的扩展方法。 (这意味着您也可以轻松地将它用于LINQ等。)


3
投票

或者您可以使用ReadAllLines来简化代码:


1
投票

不,您不会遇到任何问题。如果查看EndToStream的实现,您会发现它只是检查缓冲区中是否还有数据,如果没有,是否可以从基础流中读取更多数据:


0
投票

也许全部读入一个字符串然后解析:StreamReader.ReadToEnd()


0
投票
在StreamReader继承自TextReader的意义上,

Well,StreamReaderTextReader的特化。因此应该没有问题。 :)


0
投票
            var arpStream = ExecuteCommandLine(cmd, arg);
            arpStream.ReadLine(); // Read entries
            while (!arpStream.EndOfStream)
            {
                var line1 = arpStream.ReadLine().Trim();
                //   TeststandInt.SendLogPrint(line, true);
            }
© www.soinside.com 2019 - 2024. All rights reserved.