我的代码如下所示:
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为真时有代码,但这里不相关)这不起作用,我在网上搜索了很多但是没有找到答案。我想检查文本文档中的下一行是否为空,如果是,请说“没有更多行”或类似的东西。行不为空,也不是“”。希望得到一些帮助!
答案 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;
}
}
我希望这就是你要找的......