Console.ReadLine Metoda

Definice

Přečte další řádek znaků ze standardního vstupního datového proudu.

[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 ();

Návraty

Další řádek znaků ze vstupního datového proudu nebo null pokud nejsou k dispozici žádné další řádky.

Atributy

Výjimky

Došlo k vstupně-výstupní chybě.

Není dostatek paměti k přidělení vyrovnávací paměti pro vrácený řetězec.

Počet znaků na dalším řádku znaků je větší než Int32.MaxValue.

Příklady

Následující příklad vyžaduje dva argumenty příkazového řádku: název existujícího textového souboru a název souboru pro zápis výstupu. Otevře existující textový soubor a přesměruje standardní vstup z klávesnice do daného souboru. Přesměruje také standardní výstup z konzoly do výstupního souboru. Pak použije metodu Console.ReadLine ke čtení každého řádku v souboru, nahradí každou posloupnost čtyř mezer znakem tabulátoru a použije metodu Console.WriteLine k zápisu výsledku do výstupního souboru.

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

Poznámky

Metoda ReadLine čte řádek ze standardního vstupního datového proudu. (Definici řádku najdete v odstavci za následujícím seznamem.) To znamená, že:

  • Pokud je standardním vstupním zařízením klávesnice, metoda se blokuje, ReadLine dokud uživatel nestiskne klávesu Enter .

    Jedním z nejběžnějších ReadLine použití metody je pozastavit provádění programu před vymazáním konzoly a zobrazením nových informací do ní nebo vyzvat uživatele, aby před ukončením aplikace stiskl klávesu Enter. Toto dokládá následující příklad.

    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...
    
  • Pokud je standardní vstup přesměrován do souboru, ReadLine metoda přečte řádek textu ze souboru. Následuje například textový soubor s názvem ReadLine1.txt:

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

    Následující příklad používá metodu ReadLine ke čtení vstupu, který je přesměrován ze souboru. Operace čtení se ukončí, když metoda vrátí null, což znamená, že nezůstanou žádné řádky ke čtení.

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

    Po kompilaci příkladu do spustitelného souboru s názvem ReadLine1.exe ho můžete spustit z příkazového řádku a přečíst obsah souboru a zobrazit ho v konzole. Syntaxe je:

    ReadLine1 < ReadLine1.txt
    

Čára je definována jako posloupnost znaků následovaná návratem řádku (šestnáctkovým 0x000d), kanálem řádku (šestnáctkovým 0x000a) nebo hodnotou Environment.NewLine vlastnosti. Vrácený řetězec neobsahuje ukončovací znaky. Ve výchozím nastavení metoda čte vstup ze vstupní vyrovnávací paměti o 256 znacích. Vzhledem k tomu, že to zahrnuje Environment.NewLine znaky, může metoda číst řádky, které obsahují až 254 znaků. Pokud chcete číst delší řádky, zavolejte metodu OpenStandardInput(Int32) .

Metoda se ReadLine spouští synchronně. To znamená, že blokuje, dokud se nepřečte řádek nebo se stiskne kombinace kláves Ctrl+Z (následovaná klávesou Enter ve Windows). Vlastnost In vrátí TextReader objekt, který představuje standardní vstupní stream a který má synchronní TextReader.ReadLine metodu i asynchronní TextReader.ReadLineAsync metodu. Pokud se však použije jako standardní vstupní stream konzoly, TextReader.ReadLineAsync spustí se synchronně, nikoli asynchronně a vrátí Task<String> až po dokončení operace čtení.

Pokud tato metoda vyvolá OutOfMemoryException výjimku, pozice čtenáře v podkladovém Stream objektu je rozšířena o počet znaků, které byla metoda schopna přečíst, ale znaky již přečtené do interní ReadLine vyrovnávací paměti jsou zahozeny. Vzhledem k tomu, že pozici čtenáře v datovém proudu nelze změnit, jsou již přečtené znaky neopravitelné a lze k tomu získat přístup pouze opětovným inicializací objektu TextReader. Pokud je počáteční pozice v rámci datového proudu neznámá nebo datový proud nepodporuje hledání, je také potřeba znovu inicializovat podklad.Stream Abyste se takové situaci vyhnuli a vytvořili robustní kód, měli byste použít KeyAvailable vlastnost a ReadKey metodu a uložit přečtené znaky do předem přidělené vyrovnávací paměti.

Pokud je při čtení vstupu z konzoly metody stisknuta kombinace kláves Ctrl+Z (následovaná klávesou Enter v systému Windows), vrátí nullmetoda . To uživateli umožní zabránit dalšímu zadávání pomocí klávesnice, když ReadLine je metoda volána ve smyčce. Následující příklad znázorňuje tento scénář.

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

Platí pro

Produkt Verze
.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

Viz také