Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
57
Добавлен:
19.04.2015
Размер:
158.21 Кб
Скачать

Перенаправление стандартных потоков

Тремя стандартными потоками, доступ к которым осуществляется через свойства Console.Out, Console.Inи Console.Error, могут пользоваться все программы, работающие в пространстве имен System. Свойство Console.Out относится к стандартному выходному потоку. По умолчанию это консоль. Например, при вызове метода Console.WriteLine() информация автоматически передается в поток Console.Out. Свойство Console.In относится к стандартному входному потоку, источником которого по умолчанию является клавиатура. Например, при вводе данных с клавиатуры информация автоматически передается потоку Console.In, к которому можно обратиться с помощью метода Console.ReadLine(). Свойство Console.Error относится к ошибкам в стандартном потоке, источником которого также по умолчанию является консоль. Однако эти потоки могут быть перенаправлены на любое совместимое устройство ввода-вывода, например, на работу с физическими файлами.

Перенаправить стандартный поток можно с помощью методов SetIn(), SetOut() и SetError(), которые являются членами класса Console:

static void Setln(TextReader input)

static void SetOut(TextWriter output)

static void SetError(TextWriter output)

Пример перенаправления потоков проиллюстрирован следующей программой, в которой двумерный массив вводится из файла input.txt, а выводится в файл output.txt

static void Main()

{

try

{

int[,] MyArray;

StreamReader file=new StreamReader("input.txt");

Console.SetIn(file); // перенаправляем стандартный входной поток на file

string line=Console.ReadLine();

string []mas=line.Split(' ');

int n=int.Parse(mas[0]);

int m=int.Parse(mas[1]);

MyArray = new int[n,m];

for (int i = 0; i < n; i++)

{

line = Console.ReadLine();

mas = line.Split(' ');

for (int j = 0; j < m; j++)

{

MyArray[i,j] = int.Parse(mas[j]);

}

}

PrintArray("исходный массив:", MyArray, n, m);

file.Close();

}

static void PrintArray(string a, int[,] mas, int n, int m)

{

StreamWriter file=new StreamWriter("output.txt"); // перенаправляем стандартный входной поток на file

Console.SetOut(file);

Console.WriteLine(a);

for (int i = 0; i < n; i++)

{

for (int j=0; j<m; j++) Console.Write("{0} ", mas[i,j]);

Console.WriteLine();

}

file.Close();

}

___input.txt_________

3 4

1 4 2 8

4 9 0 1

5 7 4 2

При необходимости восстановить исходное состояние потока Console.In можно следующим образом:

TextWriter str = Console.In; // первоначально сохраняем исходное состояние входного потока

Console.SetIn(str); // при необходимости восстанавливаем исходное состояние входного потока

Аналогичным образом можно восстановить исходное состояние потокаConsole.Out:

TextWriter str = Console.Out; // первоначально сохраняем исходное состояние выходного потока

// при необходимости восстанавливаем исходное состояние выходного потока

Console.SetOut(str);

Задание. Подумайте для чего нужно два потока Console.Out и Console.Error, если они оба при стандартной работе выводят информацию на экран.

9

Соседние файлы в папке 11