2012-09-07 85 views

回答

1

那么,你应该在循环使用的方法“的ReadLine()”从StreamReader的。当您收到一个空行时,只需检查从ReadLine()获得的字符串是否为空。如果是,请忽略该行。 试着这么做:

StreamReader input = new StreamReader("..."); 
    String line = null; 

    do 
    { 
    line = input.ReadLine(); 

    if (line == null) 
    { 
    return; 
    } 

    if (line == String.Empty) 
    { 
    continue; 
    } 

    // Here you process the non-empty line 

    } while (true); 
+0

可以缩短ifs为'if(string.IsNullOrWhiteSpace(line))'等等... – dtsg

+0

谢谢你,它的工作.... – user1285783

+2

需要“null”检查以允许退出循环。另一方面,空字符串检查仅显示一条空行,并不是退出循环的原因。因此,这两个条件不能通过“if(string.IsNullOrWhiteSpace(line))” –

10

您还没有表现出任何代码,你的描述是相当长毛,但随着.NET 4中,这将是一个非常简单的方法做你想要什么:

IEnumerable<string> lines = File.ReadLines().Where(line => line != ""); 

注意,它赢得了” t执行任何修剪,因此只有空格的行仍然会被返回。

还要注意,上面代码不读取文件时,你只是执行该行 - 当您尝试遍历lines只会读它,并会再次读它一次迭代lines。如果你想将它读入内存中的所有一气呵成,你可能想:

List<string> lines = File.ReadLines().Where(line => line != "").ToList(); 
0

下面是代码

private void ReadFile() 
{ 
try 
     { 
      string line = null; 
      System.IO.TextReader readFile = new StreamReader("C:\\csharp.net-informations.txt"); 
      while (true) 
      { 
       line = readFile.ReadLine(); 
       if (line != null) 
       { 
        MessageBox.Show (line); 
       } 
      } 
      readFile.Close(); 
      readFile = null; 
     } 
     catch (IOException ex) 
     { 
      MessageBox.Show(ex.ToString()); 
     } 
} 
+0

这些代码将永久循环连接在一起,在readline抛出时不会关闭文件,也不会过滤空行。 Btw null的readFile变量在垃圾收集时间是多余的 – Firo

相关问题