ПотокиConsole . OutиConsole .Errorявляются объектами типаTextWriter.Вывод на консоль проще всего осуществить с помощью методовWrite иWriteLine , с которыми вы уже знакомы. Существуют варианты этих методов для вывода данных каждого из встроенных типов. В классеConsoleопределяются его собственные варианты методаWrite nWriteLine,nпоэтому они могут вызываться непосредственно для классаConsole,как это было уже не раз показано на страницах данной книги. Но при желании эти и другие методы могут быть вызваны и для классаTextWriter,который является базовым для потоковConsole . OutиConsole . Error.
Ниже приведен пример программы, в котором демонстрируется вывод в потокиConsole . OutиConsole . Error.По умолчанию данные в обоих случаях выводятся на консоль.
// Организовать вывод в потоки Console.Out и Console.Error.
using System;
class ErrOut {
static void Main { int a=10, b=0; int result;
Console.Out.WriteLine("Деление на нуль приведет " +
"к исключительной ситуации.");
try {
result = а / b; // сгенерировать исключение при попытке деления на нуль } catch(DivideByZeroException exc) {
Console.Error.WriteLine(exc.Message);
}
}
}
При выполнении этой программы получается следующий результат.
Деление на нуль приведет к исключительной ситуации.
Попытка деления на нуль.
Начинающие программисты порой испытывают затруднения при использовании потокаConsole.Error.Перед ними невольно встает вопрос: если оба потока,Console . OutиConsole .Error,по умолчанию выводят результат на консоль, то зачем нужны два разных потока вывода? Ответ на этот вопрос заключается в том, что стандартные потоки могут быть переадресованы на другие устройства. Так, потокConsole .Errorможно переадресовать в выходной файл на диске, а не на экран. Это, например, означает, что сорбщения об ошибках могут быть направлены в файл журнала регистрации, не мешая выводу на консоль. И наоборот, если вывод на консоль пере-адресуется, а вывод сообщений об ошибках остается прежним, то на консоли появятся сообщения об ошибках, а не выводимые на нее данные. Мы еще вернемся к вопросу переадресации после рассмотрения файлового ввода-вывода.
Класс FileStream и байтовый ввод-вывод в файл