ReadToEnd работает - ReadLine не работает - PullRequest
0 голосов
/ 17 августа 2011
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 ]

2 голосов
/ 17 августа 2011

Вот правильный способ читать файл построчно:

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

Как только блок using заканчивается, поток автоматически закрывается.

1 голос
/ 17 августа 2011

Джони прав.Вы хотите сделать что-то вроде следующего:

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();
0 голосов
/ 15 января 2014

По сути, что не так с вашим кодом, так это то, что значение строки никогда не меняется, что вызывает бесконечный цикл в вашем приложении. Вы также ничего не делаете в цикле 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();
    }
  }
}
0 голосов
/ 17 августа 2011

sr.Close () закрывает файловый поток.

Самый простой способ прочитать строки таков:

string lines[] = File.ReadAllLines("c:\\test.txt");
0 голосов
/ 17 августа 2011

sr.Close должно быть выполнено после чтения файла, и хотя оно должно быть вокруг функции записи:

while(){
   function();
}

Если эта строка! = Null в порядке с C #, я не совсем уверен, но яЯ думаю, что в StreamReader есть функция, которая может проверять конец потока.

Но было бы неплохо изучить базовый синтаксис C #.

...