Ler em inglês

Partilhar via


Console.ReadLine Método

Definição

Lê a próxima linha de caracteres do fluxo de entrada padrão.

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

Retornos

A próxima linha de caracteres do fluxo de entrada, ou null, se não houver mais linhas disponíveis.

Atributos

Exceções

Ocorreu um erro de E/S.

Não há memória suficiente para alocar um buffer à cadeia de caracteres retornada.

O número de caracteres na próxima linha de caracteres é maior que Int32.MaxValue.

Exemplos

O exemplo a seguir requer dois argumentos de linha de comando: o nome de um arquivo de texto existente e o nome de um arquivo para gravar a saída. Ele abre o arquivo de texto existente e redireciona a entrada padrão do teclado para esse arquivo. Ele também redireciona a saída padrão do console para o arquivo de saída. Em seguida, ele usa o Console.ReadLine método para ler cada linha no arquivo, substitui cada sequência de quatro espaços por um caractere de tabulação e usa o Console.WriteLine método para gravar o resultado no arquivo de saída.

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;
    }
}

Comentários

O ReadLine método lê uma linha do fluxo de entrada padrão. (Para obter a definição de uma linha, consulte o parágrafo após a lista a seguir.) Isso significa que:

  • Se o dispositivo de entrada padrão for o teclado, o ReadLine método será bloqueado até que o usuário pressione a tecla Enter .

    Um dos usos mais comuns do ReadLine método é pausar a execução do programa antes de limpar o console e exibir novas informações para ele ou solicitar que o usuário pressione a tecla Enter antes de encerrar o aplicativo. O exemplo a seguir ilustra essa situação.

    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...
    
  • Se a entrada padrão for redirecionada para um arquivo, o ReadLine método lerá uma linha de texto de um arquivo. Por exemplo, o seguinte é um arquivo de texto chamado ReadLine1.txt:

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

    O exemplo a seguir usa o ReadLine método para ler a entrada que é redirecionada de um arquivo. A operação de leitura termina quando o método retorna null, o que indica que nenhuma linha permanece a ser lida.

    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:
    //       ---
    

    Depois de compilar o exemplo em um executável chamado ReadLine1.exe, você pode executá-lo na linha de comando para ler o conteúdo do arquivo e exibi-los no console. A sintaxe do é:

    ReadLine1 < ReadLine1.txt
    

Uma linha é definida como uma sequência de caracteres seguida por um retorno de carro (0x000d hexadecimal), uma alimentação de linha (0x000a hexadecimal) ou o valor da Environment.NewLine propriedade . A cadeia de caracteres retornada não contém os caracteres de terminação. Por padrão, o método lê a entrada de um buffer de entrada de 256 caracteres. Como isso inclui os Environment.NewLine caracteres, o método pode ler linhas que contêm até 254 caracteres. Para ler linhas mais longas, chame o OpenStandardInput(Int32) método .

O ReadLine método é executado de forma síncrona. Ou seja, ele é bloqueado até que uma linha seja lida ou a combinação de teclado Ctrl+Z (seguida por Enter no Windows) seja pressionada. A In propriedade retorna um TextReader objeto que representa o fluxo de entrada padrão e que tem um método síncrono TextReader.ReadLine e um método assíncrono TextReader.ReadLineAsync . No entanto, quando usado como fluxo de entrada padrão do console, o TextReader.ReadLineAsync é executado de forma síncrona em vez de assíncrona e retorna apenas um Task<String> após a conclusão da operação de leitura.

Se esse método gerar uma exceção OutOfMemoryException , a posição do leitor no objeto subjacente Stream será avançada pelo número de caracteres que o método conseguiu ler, mas os caracteres já lidos no buffer interno ReadLine serão descartados. Como a posição do leitor no fluxo não pode ser alterada, os caracteres já lidos são irrecuperáveis e só podem ser acessados reinicializando o TextReader. Se a posição inicial dentro do fluxo for desconhecida ou o fluxo não der suporte à busca, o subjacente Stream também precisará ser reinicializado. Para evitar essa situação e produzir um código robusto, você deve usar a propriedade e ReadKey o KeyAvailable método e armazenar os caracteres de leitura em um buffer pré-alocado.

Se a combinação de teclas Ctrl+Z (seguida por Enter no Windows) for pressionada quando o método estiver lendo a entrada do console, o método retornará null. Isso permite que o usuário impeça a entrada adicional do teclado quando o ReadLine método é chamado em um loop. O exemplo a seguir ilustra esse cenário.

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
//
//       >

Aplica-se a

Produto Versões
.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
.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

Confira também