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();
}
}
}
ответ
sr.Close должен быть выполнен после того, как чтение файла и в то время как потребность быть вокруг функции записи:
while(){
function();
}
Если эта строка = нуль нормально с C#! я не совсем уверен, но я думаю, что в StreamReader есть функция, которая может проверить конец потока.
Но было бы неплохо изучить базовый синтаксис C#.
Вот правильный способ чтения файла построчно:
using (StreamReader sr = File.OpenText("test.txt"))
{
string line;
while ((line = sr.ReadLine()) != null)
Console.WriteLine(line);
}
После using
блока заканчивается поток автоматически закрывается.
Не могли бы вы объяснить, как C# анализирует эту строку в цикле while? В частности 'while ((line = sr.ReadLine())! = Null)'; Я не понимаю, как у вас может быть оператор присваивания, а затем проверьте! = Null, все в одной строке. Я пробовал это, и он отлично работает, я просто хочу знать, почему он работает. @Dalmas – rivanov
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();
sr.Close() закрывает поток файлов.
Самый простой способ читать строки заключается в следующем:
string lines[] = File.ReadAllLines("c:\\test.txt");
По сути, то, что случилось с вашим кодом является то, что стоимость линии не изменяется, который вызывает бесконечный цикл в приложении. Вы также ничего не делаете внутри цикла 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();
}
}
}
Как-то я наткнулся на это и не понял, сколько ему лет, пока я не отправил ответ ... Упс :) –
На каком языке это должно быть? Пожалуйста, отметьте соответствующим образом. –