Использование Console.Read () для определения конца файла C # - PullRequest
3 голосов
/ 14 января 2012

Несколько дней назад я задал вопрос о том, как определить конец входного файла из N (N неизвестно) строк.

StringBuilder input = new StringBuilder();

int endOfFile = 0
while ((endOfFile = Console.Read()) != -1) {
    input.Append(((char)endOfFile).ToString());
    input.Append(Console.ReadLine());
}

Я отредактировал свой вопрос, но, думаю,это то же самое, что некоторые из подсказок ниже.

Ответы [ 5 ]

9 голосов
/ 11 мая 2015

@ Jagannath в основном имел его, точно так, как вы просили, за исключением одной маленькой детали: этот метод работает и на консоли, без использования явного StreamReader:

string line;
while ((line = Console.ReadLine()) != null)
{
    // TODO: Add processing
    Console.WriteLine(line);
}

Если вы печатаете напрямуюв консоли вместо того, чтобы полагаться на ввод, перенаправленный из файла, нажмите CTRL-Z или F6 , чтобы вызвать «конец файла» на входе консоли.Внутри консоли F6 является просто синонимом CTRL-Z .

Имейте в виду, что CTRL-Z здесь представляет собой последовательность прерываний илисигнал, а не входной символ.На экране отобразится ^Z.но вы не получите символ CTRL-Z (U + 001A) в программе.Последовательность CTRL-Z перехватывается консолью и вызывает закрытие входного потока, как если бы «файл достиг конца». Не вставлять CTRL-Z во входной файл.

Начало использования CTRL-Z для этой цели восходит, по крайней мере, к операционной системе CP / M (короткая занимательная историясам по себе, но тот, который выходит за рамки).

1 голос
/ 14 января 2012

Не совсем уверен, почему вы спрашиваете об этом, поскольку ответ, который вы приняли на свой предыдущий вопрос, является самым простым способом сделать то, что вы спрашивали там.Вы просто ищете альтернативные решения?

Вам следует проверить документацию для Console.ReadKey .В примечаниях говорится:

Метод ReadKey считывает данные с клавиатуры, даже если стандартный ввод перенаправляется в файл с помощью метода SetIn.

ReadKey будетблокировать, пока вы не нажмете клавишу на клавиатуре.Вы не можете использовать ReadKey для определения конца перенаправленного ввода.

1 голос
/ 14 января 2012

Это может помочь в циклическом просмотре файла и проверке конца файла.

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

ОБНОВЛЕНИЕ

Вот ссылка из msdn Метод ReadLine

1 голос
/ 14 января 2012

Планируете ли вы использовать оболочку для перенаправления стандартного ввода во входной файл?

Почему бы не использовать что-то вроде TextReader.Read () или TextReader.ReadLine ()? http://msdn.microsoft.com/en-us/library/system.io.textreader.aspx

0 голосов
/ 14 января 2012

Для чтения ввода из файла вы можете использовать

var text = File.ReadAllLines("path/to/file.txt");

Если вы хотите получить ввод с консоли символ за символом, вы можете сделать что-то вроде этого:

ConsoleKeyInfo keyInfo;
while ((keyInfo = Console.ReadKey()).Key != ConsoleKey.Escape)
{
}

Вы можете заменить ConsoleKey.Escape любой другой клавишей или проверить комбинации клавиш, например, CTRL + D, CTRL + C, используя keyInfo.Modifiers.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...