при выполнении программы из командной строки с помощью операторов < и >, переадресовывающих потоки 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 SetOut(TextWriter новый_поток_вывода)

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

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату