测试c#

时间:2015-09-16 07:52:48

标签: c# file text

我的代码如下所示:

 System.IO.StreamReader savednames =
                new System.IO.StreamReader(@"c:\users\example\text.txt");
            while ((line = savednames.ReadLine()) != null) 
            {
                if (line == null)
                {
                    Console.WriteLine("No more content!");
                    }         }

(是的,当while为真时有代码,但这里不相关)这不起作用,我在网上搜索了很多但是没有找到答案。我想检查文本文档中的下一行是否为空,如果是,请说“没有更多行”或类似的东西。行不为空,也不是“”。希望得到一些帮助!

2 个答案:

答案 0 :(得分:3)

发生这种情况是因为当你到达文件的末尾时,while循环的条件为false并且未输入正文,因此不会打印消息。

按如下方式更改循环:

while (true)
{
    var line = savednames.ReadLine();

    if (line == null)
    {
        Console.WriteLine("No more content!");
        break;
    }
}

请注意,这只会在到达文件末尾时终止循环。它不会因为文件中的一行是空的而终止它。

如果要在空行上终止循环,请使用:

while (true)
{
    var line = savednames.ReadLine();

    if (string.IsNullOrEmpty(line))
    {
        Console.WriteLine("No more content!");
        break;
    }
}

如果你想在空行或空行上终止循环,请使用:

while (true)
{
    var line = savednames.ReadLine();

    if (string.IsNullOrWhiteSpace(line))
    {
        Console.WriteLine("No more content!");
        break;
    }
}

这种循环结构在读取文件时非常常用。它被称为“循环半”。

请注意,可能有更好的方法可以避免使用“循环半”(有些人不喜欢)。

例如,您可以使用File.ReadLines()方法从文件中获取所有行,而无需缓冲:

foreach (string line in File.ReadLines(@"c:\users\example\text.txt"))
{
    // Do something with line                
}

Console.WriteLine("No more content!");

如果你只想处理第一个非空行(就像上面的第二个循环示例中那样),你会这样写:

var linesUntilFirstEmpty = 
    File.ReadLines(@"c:\users\example\text.txt")
    .TakeWhile(line => !string.IsNullOrEmpty(line));

foreach (string line in linesUntilFirstEmpty)
{
    // Do something with line                
}

Console.WriteLine("No more content!");

如果你想处理第一个空白或空白的行:

var linesUntilFirstBlankOrEmpty = 
    File.ReadLines(@"c:\users\example\text.txt")
    .TakeWhile(line => !string.IsNullOrWhiteSpace(line));

foreach (string line in linesUntilFirstBlankOrEmpty)
{
    // Do something with line                
}

Console.WriteLine("No more content!");

答案 1 :(得分:0)

要获得预期的输出,您需要更改while循环的条件。 像这样制作while循环......

while (true)       
{    
    var line = savednames.ReadLine();

    if (string.IsNullOrEmpty(line))
    {
        Console.WriteLine("No more content!");
        break;
    }
} 

我希望这就是你要找的......