при выполнении программы из командной строки с помощью операторов < и >, переадресовывающих потоки Console . In и Console . Out соответственно. Допустим, что имеется следующая программа.
using System;
class Test {
static void Main() {
Console.WriteLine('Это тест.');
}
}
Если выполнить эту программу из командной строки Test > log
то символьная строка 'Это тест.' будет выведена в файл log. Аналогичным образом переадресуется ввод. Но для переадресации ввода указываемый источник входных данных должен удовлетворять требованиям программы, иначе она 'зависнет'.
Операторы < и >, выполняющие переадресацию из командной строки, не являются составной частью С#, а предоставляются операционной системой. Поэтому если в рабочей среде поддерживается переадресация ввода-вывода, как, например, в Windows, то стандартные потоки ввода и вывода можно переадресовать, не внося никаких изменений в программу. Тем не менее существует другой способ, позволяющий осуществлять переадресацию стандартных потоков под управлением самой программы. Для этого служат приведенные ниже методы Setln () , SetOut () и SetError () , являющиеся членами класса Console.
static void Setln(TextReader
static void SetError(TextWriter
Таким образом, для переадресации ввода вызывается метод Setln () с указанием требуемого потока. С этой целью может быть использован любой поток ввода, при условии, что он является производным от класса TextReader. А для переадресации вывода вызывается метод SetOut () с указанием требуемого потока вывода, который должен быть также производным от класса TextReader. Так, для переадресации вывода в файл достаточно указать объект класса FileStream, заключенный в оболочку класса StreamWriter. Соответствующий пример программы приведен ниже.
// Переадресовать поток Console.Out.
using System; using System.10;
class Redirect {
static void Main() {
StreamWriter log_out = null;
try {
log_out = new StreamWriter('logfile.txt');
// Переадресовать стандартный вывод в файл logfile.txt.
Console.SetOut(log_out);
Console.WriteLine('Это начало файла журнала регистрации.');
for(int i=0; i<10; i++) Console.WriteLine(i);
Console.WriteLine('Это конец файла журнала регистрации.');
} catch(IOException exc) {
Console.WriteLine('Ошибка ввода-выводап' + exc.Message);
} finally {
if(log_out != null) log_out.Close();
}
}
}
При выполнении этой программы на экран ничего не выводится, но файл logfile. txt будет содержать следующее.
Это начало файла журнала регистрации.
0
1
2
