2011-08-16 4 views
0
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(); 
    } 
    } 
} 
+1

На каком языке это должно быть? Пожалуйста, отметьте соответствующим образом. –

ответ

0

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

while(){ 
    function(); 
} 

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

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

2

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

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

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

+0

Не могли бы вы объяснить, как C# анализирует эту строку в цикле while? В частности 'while ((line = sr.ReadLine())! = Null)'; Я не понимаю, как у вас может быть оператор присваивания, а затем проверьте! = Null, все в одной строке. Я пробовал это, и он отлично работает, я просто хочу знать, почему он работает. @Dalmas – rivanov

1

Johni is right. Вы хотите сделать что-то вроде:

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

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

Самый простой способ читать строки заключается в следующем:

string lines[] = File.ReadAllLines("c:\\test.txt"); 
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(); 
    } 
    } 
} 
+0

Как-то я наткнулся на это и не понял, сколько ему лет, пока я не отправил ответ ... Упс :) –