Операторы < и >, выполняющие переадресацию из командной строки, не являются составной частью С#, а предоставляются операционной системой. Поэтому если в рабочей среде поддерживается переадресация ввода-вывода, как, например, в 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
3
4
5
6
7
8
9
Это конец файла журнала регистрации.
Попробуйте сами поупражняться в переадресации других встроенных потоков.
Чтение и запись двоичных данных