#c# #.net-core #streamreader
#c# #.net-ядро #streamreader
Вопрос:
Я читаю строки из командной строки. Но конец потока не может быть обнаружен моей программой. Как мне восстановить это или есть способ явно установить для EndOfStream значение true?
List<String> str = new List<String>();
using (StreamReader reader = new StreamReader(Console.OpenStandardInput()))
while (!reader.EndOfStream)
{
string line = reader.ReadLine();
if (line != string.Empty)
{
str.Add(line);
}
}
Комментарии:
1. Почему вы ожидаете, что поток консоли завершится? Поток должен оставаться открытым до тех пор, пока программа не будет закрыта.
2.
ReadLine()
обычно возвращаетсяnull
, если в любом случае достигнут конец потока, поэтому вам даже не нужно проверятьEndOfStream
. Однако в вашем случае это не сработает, потому что по замыслу консоль никогда не достигает своего конца. Вам нужно будет найти другой метод определения того, когда ввод данных завершен.
Ответ №1:
Это не может сработать по замыслу. Потоки консоли stdin / stdout открываются до тех пор, пока программа активна. В EndOfStream
этом случае выполняется непосредственно перед закрытием приложения.
Хорошим решением для вашей проблемы является.
using System;
public class Example
{
public static void Main()
{
string line;
do {
line = Console.ReadLine();
if (line != null)
Console.WriteLine("Now I have detected the end of stream.... " line);
} while (line != null);
}
}
Ответ №2:
Ваш код в порядке. При чтении с консоли EOF указывается путем ввода: ^z затем ENTER .
Это стандарт, такой же старый, как DOS. В Unix есть аналогичный стандарт, но это ^d .
Билл Гейтс либо не знал Unix, либо решил быть другим, но не лучше. Вот почему это ^z, а не ^d
Аналогично, DOS и Windows обрабатывают «/» как разделитель параметров командной строки, хотя «/» и «» обрабатываются внутренними компонентами Windows как разделители путей.