- •1.2 Понятия приложения, проекта, решения
- •1.3 Среда разработки Visual Studio .Net
- •1.4 Создание первого проекта
- •1. 5 Компиляция и выполнение программы в среде clr
- •2.1 Основы технологии ооп
- •2.2 Состав языка
- •2.3 Типы данных
- •2.4 Переменные и константы
- •2.5 Организация ввода-вывода данных. Форматирование
- •3.1 Некоторые операции с#
- •Отрицание:
- •Условная операция.
- •3.2 Выражения и преобразование типов
- •3.3 Перечень операций
- •3.4 Математические функции языка с#
- •4.1 Операторы следования
- •4.2 Операторы ветвления
- •4.3 Операторы цикла
- •4.4 Операторы безусловного перехода
- •5.1 Методы: основные понятия
- •5.2 Перегрузка методов
- •6.1 Прямая рекурсия
- •6.2 Косвенная рекурсия
- •7.1 Оператор try
- •7.2 Операторы checked и unchecked
- •7.3 Генерация собственных исключений
- •7.4 Приемы использования обработчиков исключений
- •8.1 Одномерные массивы
- •8.2 Массив как параметр
- •8.3 Массив как объект
- •8.4 Многомерные массивы
- •8.5 Ступенчатые массивы
- •8.6 Оператор foreach и его использование при работе с массивами
- •Примеры
- •9.1 Символы char
- •9.2 Неизменяемые строки string
- •9.3 Изменяемые строки
- •Вариант 1
- •Вариант 2
- •Редактирование текста;
- •10.1 Метасимволы в регулярных выражениях
- •10.2 Поиск в тексте по шаблону
- •10.3 Редактирование текста
- •11.1 Байтовый поток
- •11.2 Символьный поток
- •11.3 Двоичные потоки
- •11.4 Перенаправление стандартных потоков
- •Практикум
- •12.1.Работа с файловой системой: классы Directory и Filе и классы DirectoryInfo и FileInfo
- •12.2 Класс FileSystemInfo
- •12.3 Класс DirectoryInfo
- •12.4 Класс Directory
- •2. Реализуем метод, позволяющий получить по имени узла полное имя соответствующей папки
- •12.2 Работа с файлами
- •12.5 Класс File
- •13.1. Классы: основные понятия, данные, методы, конструкторы, свойства
- •13.2 Данные: поля и константы
- •13.3 Методы
- •Конструкторы экземпляра
- •13.4 Конструкторы класса
- •13.5 Свойства
- •13.6 Один класс - один файл
- •13.7. Классы: деструкторы, индексаторы Деструкторы
- •Индексаторы
- •13.8 Операции класса
- •14.1 Иерархия и наследование
- •Использование защищенного доступа
- •14.2 Наследование конструкторов
- •Позволяет вызвать конструктор базового класса:
- •Позволяет получить доступ к члену базового класса, который скрыт "за" членом производного класса.
- •14.3 Многоуровневая иерархия
- •14.4 Переменные базового класса и производного класса
- •14.5 Виртуальные методы
- •14.6 Абстрактные методы и классы
- •14.7 Запрет наследования
- •Самостоятельная работа
- •15.1. Пользовательские и стандартные интерфейсы
- •15.2 Стандартные интерфейсы .Net
- •15.3 Структуры
- •Задание
- •16.1. Классификация коллекций.
- •16.2 Коллекции общего назначения
- •16.3 Класс Stack
- •16.4 Класс Queue
- •16.5 Класс ArrayList
- •16.6 Класс Hashtable
- •17.1 Струткура простейшего windows-приложения
- •17.2 Элементы управления на форме
- •17.3 Обработка событий
- •17.4 Работа с элементами управления
- •17.5 Кнопки
- •17.6 Работа с элементами управления в режиме работы приложения
- •17.7 Работа со списками: ListBox, ComboBox, NumericUpDown.
- •17.8 Работа с переключателями: RadioButton, CheckBox
- •18.1 Рисование в форме
- •18.2 Работа с изображениями
11.4 Перенаправление стандартных потоков
Тремя стандартными потоками, доступ к которым осуществляется через свойства 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, если они оба при стандартной работе выводят информацию на экран.
Практикум
-
Работа с двоичными файлами: создать файл и записать в него вещественные числа из диапазона от a до b с шагом h. Вывести на экран все компоненты файла с нечетными порядковыми номерами.
using System;
using System.Text;
using System.IO;
namespace MyProgram
{
class Program
{
static void Main()
{
Console.Write("a= ");
double a=double.Parse(Console.ReadLine());
Console.Write("b= ");
double b=double.Parse(Console.ReadLine());
Console.Write("h= ");
double h=double.Parse(Console.ReadLine());
//Записываем в файл t.dat вещественные числа из заданного диапазона
FileStream f=new FileStream("t.dat",FileMode.Open);
BinaryWriter fOut=new BinaryWriter(f);
for (double i=a; i<=b; i+=h)
{
fOut.Write(i);;
}
fOut.Close();
//Объекты f и fIn связаны с одним и тем же файлом
f=new FileStream("t.dat",FileMode.Open);
BinaryReader fIn=new BinaryReader(f);
long m=f.Length; //определяем количество байт в потоке
//Читаем данные из файла t.dat начиная с элемента с номером 1, т.е с 8 байта,
//перемещая внутренний указатель на 16 байт, т.е. на два вещественных числа
for (long i=8; i<m; i+=16)
{
f.Seek(i,SeekOrigin.Begin);
a=fIn.ReadDouble();
Console.Write("{0:f2} ",a);
}
fIn.Close();
f.Close();
}
}
}
-
Работа с текстовым (символьным) файлом. Дан текстовый файл. Найти количество строк, которые начинаются с данной буквы.
Замечание: Напоминаем, что файл text.txt должен содержать английский текст
using System;
using System.Text;
using System.IO;
using System.Text.RegularExpressions;
namespace MyProgram
{
class Program
{
static void Main()
{
Console.Write("Введите заданную букву: ");
char a=char.Parse(Console.ReadLine());
StreamReader fileIn = new StreamReader("text.txt");
string text=fileIn.ReadToEnd(); //считываем из файла весь текст
fileIn.Close();
int k=0;
//разбиваем текст на слова используя регулярные выражения
string []newText=Regex.Split(text,"[ ,.:;]+");
//подсчитываем количество слов, начинающихся на заданную букву
foreach( string b in newText)
if (b[0]==a)++k;
Console.WriteLine("k= "+k);
}
}
}
Самостоятельная работа
Используя дополнительную литературу и Интернет рассмотреть использование:
-
класса MemoryStream;
-
классов StringReader и StringWriter
Лекция 12. Работа с файловой системой