Прочитать на английском

Поделиться через


Console.ReadLine Метод

Определение

Считывает следующую строку символов из стандартного входного потока.

C#
[System.Runtime.Versioning.UnsupportedOSPlatform("android")]
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public static string? ReadLine();
C#
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public static string? ReadLine();
C#
public static string ReadLine();

Возвращаемое значение

Следующая строка символов из входного потока или значение null, если больше нет доступных строк.

Атрибуты

Исключения

Ошибка ввода/вывода.

Не хватает памяти для выделения буфера под возвращаемую строку.

Число символов в следующей строке больше, чем Int32.MaxValue.

Примеры

В следующем примере требуются два аргумента командной строки: имя существующего текстового файла и имя файла для записи выходных данных. Он открывает существующий текстовый файл и перенаправляет стандартные входные данные с клавиатуры в этот файл. Он также перенаправляет стандартные выходные данные из консоли в выходной файл. Затем он использует Console.ReadLine метод для чтения каждой строки в файле, заменяет каждую последовательность из четырех пробелов символом табуляции и использует Console.WriteLine метод для записи результата в выходной файл.

C#
using System;
using System.IO;

public class InsertTabs
{
    private const int tabSize = 4;
    private const string usageText = "Usage: INSERTTABS inputfile.txt outputfile.txt";
    public static int Main(string[] args)
    {
        if (args.Length < 2)
        {
            Console.WriteLine(usageText);
            return 1;
        }

        try
        {
            // Attempt to open output file.
            using (var writer = new StreamWriter(args[1]))
            {
                using (var reader = new StreamReader(args[0]))
                {
                    // Redirect standard output from the console to the output file.
                    Console.SetOut(writer);
                    // Redirect standard input from the console to the input file.
                    Console.SetIn(reader);
                    string line;
                    while ((line = Console.ReadLine()) != null)
                    {
                        string newLine = line.Replace(("").PadRight(tabSize, ' '), "\t");
                        Console.WriteLine(newLine);
                    }
                }
            }
        }
        catch(IOException e)
        {
            TextWriter errorWriter = Console.Error;
            errorWriter.WriteLine(e.Message);
            errorWriter.WriteLine(usageText);
            return 1;
        }

        // Recover the standard output stream so that a
        // completion message can be displayed.
        var standardOutput = new StreamWriter(Console.OpenStandardOutput());
        standardOutput.AutoFlush = true;
        Console.SetOut(standardOutput);
        Console.WriteLine($"INSERTTABS has completed the processing of {args[0]}.");
        return 0;
    }
}

Комментарии

Метод ReadLine считывает строку из стандартного входного потока. (Определение строки см. в абзаце после следующего списка.) Это означает, что:

  • Если стандартным устройством ввода является клавиатура ReadLine , метод блокируется, пока пользователь не нажмет клавишу ВВОД .

    Одним из наиболее распространенных способов ReadLine использования метода является приостановка выполнения программы перед очисткой консоли и отображением в ней новых сведений или запрос на нажатие клавиши ВВОД перед завершением работы приложения. Это показано в следующем примере.

    C#
    using System;
    
    public class Example
    {
       public static void Main()
       {
          Console.Clear();
    
          DateTime dat = DateTime.Now;
    
          Console.WriteLine("\nToday is {0:d} at {0:T}.", dat);
          Console.Write("\nPress any key to continue... ");
          Console.ReadLine();
       }
    }
    // The example displays output like the following:
    //     Today is 10/26/2015 at 12:22:22 PM.
    //
    //     Press any key to continue...
    
  • Если стандартные входные данные перенаправляются в файл, ReadLine метод считывает строку текста из файла. Например, ниже приведен текстовый файл с именем ReadLine1.txt:

    
    This is the first line.
    This is the second line.
    This is the third line.
    This is the fourth line.
    
    

    В следующем примере используется ReadLine метод для чтения входных данных, перенаправленных из файла. Операция чтения завершается, когда метод возвращает null, что указывает, что строки не остаются для чтения.

    C#
    using System;
    
    public class Example
    {
       public static void Main()
       {
          if (!Console.IsInputRedirected) {
             Console.WriteLine("This example requires that input be redirected from a file.");
             return;
          }
    
          Console.WriteLine("About to call Console.ReadLine in a loop.");
          Console.WriteLine("----");
          String s;
          int ctr = 0;
          do {
             ctr++;
             s = Console.ReadLine();
             Console.WriteLine("Line {0}: {1}", ctr, s);
          } while (s != null);
          Console.WriteLine("---");
       }
    }
    // The example displays the following output:
    //       About to call Console.ReadLine in a loop.
    //       ----
    //       Line 1: This is the first line.
    //       Line 2: This is the second line.
    //       Line 3: This is the third line.
    //       Line 4: This is the fourth line.
    //       Line 5:
    //       ---
    

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

    ReadLine1 < ReadLine1.txt
    

Строка определяется как последовательность символов, за которой следует возврат каретки (шестнадцатеричное 0x000d), канал строки (шестнадцатеричное 0x000a) или значение Environment.NewLine свойства . Возвращаемая строка не содержит завершающие символы. По умолчанию метод считывает входные данные из 256-символьного буфера. Так как сюда входят Environment.NewLine символы, метод может считывать строки, содержащие до 254 символов. Чтобы прочитать более длинные строки, вызовите OpenStandardInput(Int32) метод .

Метод ReadLine выполняется синхронно. То есть он блокируется до тех пор, пока не будет прочитана строка или не будет нажата клавиша CTRL+Z (за которой следует ввод в Windows). Свойство In возвращает TextReader объект , представляющий стандартный входной поток и имеющий синхронный и асинхронный TextReader.ReadLineTextReader.ReadLineAsync метод. Однако при использовании в качестве стандартного входного потока консоли выполняется синхронно, TextReader.ReadLineAsync а не асинхронно и возвращает только Task<String> после завершения операции чтения.

Если этот метод вызывает OutOfMemoryException исключение, позиция читателя в базовом Stream объекте расширена по количеству символов, которые метод смог прочитать, но символы, уже прочитанные во внутренний ReadLine буфер, удаляются. Так как положение средства чтения в потоке изменить невозможно, уже прочитанные символы являются неустранимыми и доступны только путем повторной инициализации TextReader. Если начальная позиция в потоке неизвестна или поток не поддерживает поиск, базовый Stream объект также необходимо повторно инициализировать. Чтобы избежать такой ситуации и создать надежный код, следует использовать KeyAvailable свойство и ReadKey метод и сохранить считываемые символы в предварительно выделенном буфере.

Если сочетание клавиш CTRL+Z (за которым следует ввод в Windows) при считывании входных данных из консоли метод возвращает null. Это позволяет пользователю запретить дальнейший ввод с помощью клавиатуры при вызове ReadLine метода в цикле. Проиллюстрируем это на примере.

C#
using System;

public class Example
{
   public static void Main()
   {
      string line;
      Console.WriteLine("Enter one or more lines of text (press CTRL+Z to exit):");
      Console.WriteLine();
      do {
         Console.Write("   ");
         line = Console.ReadLine();
         if (line != null)
            Console.WriteLine("      " + line);
      } while (line != null);
   }
}
// The following displays possible output from this example:
//       Enter one or more lines of text (press CTRL+Z to exit):
//
//          This is line #1.
//             This is line #1.
//          This is line #2
//             This is line #2
//          ^Z
//
//       >

Применяется к

Продукт Версии
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.3, 1.4, 1.6, 2.0, 2.1

См. также раздел