Console.Error Właściwość

Definicja

Pobiera standardowy strumień wyjściowy błędu.

C#
public static System.IO.TextWriter Error { get; }

Wartość właściwości

TextWriter

Element TextWriter reprezentujący standardowy strumień danych wyjściowych błędu.

Przykłady

Poniższy przykład to narzędzie wiersza polecenia o nazwie ExpandTabs, które zastępuje znaki tabulacji w pliku tekstowym z czterema spacjami, wartością zdefiniowaną przez zmienną tabSize . Przekierowuje standardowe strumienie wejściowe i wyjściowe do plików, ale używa Error właściwości do zapisania standardowego strumienia błędów do konsoli. Można go uruchomić z poziomu wiersza polecenia, podając nazwę pliku zawierającego znaki tabulacji i nazwę pliku wyjściowego.

C#
using System;
using System.IO;

public class ExpandTabs
{
    private const int tabSize = 4;
    private const string usageText = "Usage: EXPANDTABSEX inputfile.txt outputfile.txt";

    public static void Main(string[] args)
    {
        StreamWriter writer = null;

        if (args.Length < 2) {
            Console.WriteLine(usageText);
            return;
        }

        try {
            writer = new StreamWriter(args[1]);
            Console.SetOut(writer);
            Console.SetIn(new StreamReader(args[0]));
        }
        catch(IOException e) {
            TextWriter errorWriter = Console.Error;
            errorWriter.WriteLine(e.Message);
            errorWriter.WriteLine(usageText);
            return;
        }
        int i;
        while ((i = Console.Read()) != -1) {
            char c = (char)i;
            if (c == '\t')
                Console.Write(("").PadRight(tabSize, ' '));
            else
                Console.Write(c);
        }
        writer.Close();
        // Recover the standard output stream so that a
        // completion message can be displayed.
        StreamWriter standardOutput = new StreamWriter(Console.OpenStandardOutput());
        standardOutput.AutoFlush = true;
        Console.SetOut(standardOutput);
        Console.WriteLine("EXPANDTABSEX has completed the processing of {0}.", args[0]);
        return;
    }
}

Poniższy przykład to prosta przeglądarka plików tekstowych, która wyświetla zawartość co najmniej jednego pliku tekstowego w konsoli programu . Jeśli nie ma argumentów wiersza polecenia lub jeśli jakiekolwiek pliki przekazane jako argumenty wiersza polecenia nie istnieją, przykład wywołuje SetError metodę w celu przekierowania informacji o błędzie do pliku, wywołuje OpenStandardError metodę w procesie ponownego uzyskania standardowego strumienia błędów i wskazuje, że informacje o błędzie zostały zapisane w pliku.

C#
using System;
using System.IO;

public class ViewTextFile
{
   public static void Main()
   {
      String[] args = Environment.GetCommandLineArgs();
      String errorOutput = "";
      // Make sure that there is at least one command line argument.
      if (args.Length <= 1)
         errorOutput += "You must include a filename on the command line.\n";

      for (int ctr = 1; ctr <= args.GetUpperBound(0); ctr++)  {
         // Check whether the file exists.
         if (! File.Exists(args[ctr])) {
            errorOutput += String.Format("'{0}' does not exist.\n", args[ctr]);
         }
         else {
            // Display the contents of the file.
            StreamReader sr = new StreamReader(args[ctr]);
            String contents = sr.ReadToEnd();
            sr.Close();
            Console.WriteLine("*****Contents of file '{0}':\n\n",
                              args[ctr]);
            Console.WriteLine(contents);
            Console.WriteLine("*****\n");
         }
      }

      // Check for error conditions.
      if (! String.IsNullOrEmpty(errorOutput)) {
         // Write error information to a file.
         Console.SetError(new StreamWriter(@".\ViewTextFile.Err.txt"));
         Console.Error.WriteLine(errorOutput);
         Console.Error.Close();
         // Reacquire the standard error stream.
         var standardError = new StreamWriter(Console.OpenStandardError());
         standardError.AutoFlush = true;
         Console.SetError(standardError);
         Console.Error.WriteLine("\nError information written to ViewTextFile.Err.txt");
      }
   }
}
// If the example is compiled and run with the following command line:
//     ViewTextFile file1.txt file2.txt
// and neither file1.txt nor file2.txt exist, it displays the
// following output:
//     Error information written to ViewTextFile.Err.txt
// and writes the following text to ViewTextFile.Err.txt:
//     'file1.txt' does not exist.
//     'file2.txt' does not exist.

Należy pamiętać, że StreamWriter.AutoFlush właściwość jest ustawiona na true wartość przed ponownym odzyskaniem strumienia błędów. Dzięki temu dane wyjściowe będą wysyłane do konsoli natychmiast, a nie buforowane.

Uwagi

Ten standardowy strumień błędów jest domyślnie ustawiony na konsolę. Można go ustawić na inny strumień za pomocą SetError metody . Po przekierowaniu standardowego strumienia błędów można go ponownie uzyskać, wywołując metodę OpenStandardError .

W aplikacjach konsolowych, których informacyjne dane wyjściowe są często przekierowywane do pliku, standardowy strumień błędów dostępny za pośrednictwem Error właściwości może służyć do wyświetlania informacji w konsoli, nawet jeśli dane wyjściowe są przekierowywane. Poniższy przykład przedstawia tabele produktów dla 10 liczb w czasie rozpoczynającym się od 1. Po każdym zestawie 10 liczb Error właściwość jest używana do pytania użytkownika, czy wyświetlić następny zestaw. Jeśli standardowe dane wyjściowe są przekierowywane do pliku, użytkownik jest nadal pytany, czy procedura powinna wygenerować następny zestaw produktów.

C#
using System;

public class Example
{
   public static void Main()
   {
      int increment = 0;
      bool exitFlag = false;

      while (! exitFlag) {
         if (Console.IsOutputRedirected)
            Console.Error.WriteLine("Generating multiples of numbers from {0} to {1}",
                                    increment + 1, increment + 10);

         Console.WriteLine("Generating multiples of numbers from {0} to {1}",
                           increment + 1, increment + 10);
         for (int ctr = increment + 1; ctr <= increment + 10; ctr++) {
            Console.Write("Multiples of {0}: ", ctr);
            for (int ctr2 = 1; ctr2 <= 10; ctr2++)
               Console.Write("{0}{1}", ctr * ctr2, ctr2 == 10 ? "" : ", ");

            Console.WriteLine();
         }
         Console.WriteLine();

         increment += 10;
         Console.Error.Write("Display multiples of {0} through {1} (y/n)? ",
                             increment + 1, increment + 10);
         Char response = Console.ReadKey(true).KeyChar;
         Console.Error.WriteLine(response);
         if (! Console.IsOutputRedirected)
            Console.CursorTop--;

         if (Char.ToUpperInvariant(response) == 'N')
            exitFlag = true;
      }
   }
}

Dotyczy

Produkt Wersje
.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
.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
.NET Standard 1.3, 1.4, 1.6, 2.0, 2.1

Zobacz też