ReadToEnd Works - ReadLine不

时间:2011-08-16 22:21:47

标签: c# readline

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace ExtractData
{
  class Program
  {
    static void Main(string[] args)
    {
      StreamReader sr = File.OpenText("test.txt");
      //string line = sr.ReadToEnd();
      string line = sr.ReadLine();
      sr.Close();
      while (line != null) ;
      Console.WriteLine(line);
      Console.ReadLine();
    }
  }
}

5 个答案:

答案 0 :(得分:2)

以下是逐行读取文件的正确方法:

using (StreamReader sr = File.OpenText("test.txt"))
{
    string line;
    while ((line = sr.ReadLine()) != null)
        Console.WriteLine(line);
}

一旦using块结束,流将自动关闭。

答案 1 :(得分:1)

约翰尼是对的。您想要执行以下操作:

int counter = 0;
string line;

// Read the file and display it line by line.
System.IO.StreamReader file = new System.IO.StreamReader("c:\\test.txt");
while((line = file.ReadLine()) != null)
{
  Console.WriteLine (line);
  counter++;
}

file.Close();

// Suspend the screen.
Console.ReadLine();

答案 2 :(得分:0)

sr.Close必须在读取文件后执行,并且需要在写入函数周围执行:

while(){
   function();
}

如果使用C#这行!= null就可以了,我不太舒服,但我认为StreamReader中有一个函数可以检查流的结尾。

但是学习C#的基本语法是个好主意。

答案 3 :(得分:0)

sr.Close()关闭文件流。

阅读这些行的最简单方法是:

string lines[] = File.ReadAllLines("c:\\test.txt");

答案 4 :(得分:0)

基本上,代码的错误在于,行的值永远不会改变,从而导致应用程序中出现无限循环。你也没有在while循环中做任何事情。

我已在下面更正了您的代码:

using System;
using System.IO;

namespace ExtractData
{
  class Program
  {
    static void Main(string[] args)
    {
      StreamReader sr = File.OpenText("test.txt");

      string line;
      while ((line = sr.ReadLine()) != null)
      { Console.WriteLine(line); }

      sr.Close();
      Console.ReadKey();
    }
  }
}

但是,我建议(如其他人所述)以下之一:

如果它是一个小文件,您可以将整个文件加载到内存中并从那里使用

using System;
using System.IO;

namespace ExtractData
{
  class Program
  {
    static void Main(string[] args)
    {
      foreach (var line in File.ReadAllLines("test.txt"))
      { Console.WriteLine(line); }

      Console.ReadKey();
    }
  }
}

或者,逐行读取文件

using System;
using System.IO;

namespace ExtractData
{
  class Program
  {
    static void Main(string[] args)
    {
      using (StreamReader sr = File.OpenText("test.txt"))
      {   
        string line;
        while ((line = sr.ReadLine()) != null)
        { Console.WriteLine(line); }
      }

      Console.ReadKey();
    }
  }
}