- •Атрибуты в среде .Net и языке c#.
- •Метаданные
- •Понятие атрибутов
- •Предопределенные и собственные атрибуты
- •Потребители атрибутов
- •Применение атрибутов
- •Сокращенное именование атрибутов
- •Создание собственных атрибутов:
- •Применение собственных атрибутов:
- •Ограничение использования атрибутов:
- •Атрибуты уровня сборки и модуля:
- •Рефлексия атрибутов:
- •Выводы:
- •Язык xml. Классы платформы .Net для работы с xml-данными.
- •Синтаксис xml
- •Работа с xml при помощи System.Xml
- •Работа с xml при помощи linq to xml
- •Выводы:
- •Потоковый ввод-вывод. Файлы. Работа с файлами и каталогами. Пространство имен System.Io
- •Классы Directory (DirectoryInfo) и File (FileInfo) Некоторые общие свойства классов DirectoryInfo и FileInfo:
- •Дополнительные возможности класса DirectoryInfo
- •Дополнительные возможности класса FileInfo
- •Дополнительные члены File
- •Потоковый ввод-вывод
- •Работа с классом FileStream
- •Работа с классами StreamWriter и StreamReader
- •Классы StringWriter и StringReader
- •Работа с классами BinaryWriter и BinaryReader
- •Выводы:
- •Сериализация. Атрибуты. Стандартные форматы сериализации. Понятие сериализации объектов
- •Роль графов объектов
- •Конфигурирование объектов для сериализации
- •Общедоступные поля, приватные поля и общедоступные свойства
- •Стандартные форматеры сериализации
- •Настройка сериализации с использованием атрибутов
- •Выводы:
- •Понятие бд и субд. Язык sql. Ado.Net как средство доступа из c# к субд. Понятие бд
- •Понятие субд
- •Обзор синтаксиса
- •Подключенный уровень
- •Автономный уровень
- •Основные свойства класса DataSet
- •Основные методы класса DataSet
- •Типы DataColumn и DataRow
- •Основные члены типа DataColumn:
- •Основные члены типа DataRow:
- •Работа с адаптерами данных:
- •Основные члены класса DbDataAdapter:
- •Параллельные вычисления. Многозадачность и многопоточность.
- •Некоторые члены класс Process:
- •Некоторые члены класса ProcessThread
- •Домены приложений
- •Некоторые члены класс AppDomain:
- •Многопоточность. Классификация состояний потока. Средства многопоточного программирования System.Threading.
- •Некоторые члены пространства имен System.Threading
- •Основные члены класс Thread
- •Состояния потока
- •Многопоточное программирование при помощи асинхронных вызовов делегатов
- •Создание вторичных потоков при помощи Thread.Start()
- •Синхронизация с помощью lock
- •Синхронизация с использованием типа System.Threading.Monitor
- •Синхронизация с использованием типа System.Threading.Interlocked
- •Синхронизация с использованием атрибута [Synchronization]
- •Использование System.Threading.Timer
- •Пул потоков clr
- •Библиотека Windows.Forms. Пространства имен. Структура приложения. Элементы управления. События. Иерархия элементов управления.
- •Основные пространства имен Windows Forms
- •Структура приложения WinForms
- •Элементы управления
- •События
- •Библиотека wpf. Отличия wpf от WindowsForms. Разметка xaml. Понятие Windows Presentation Foundation
- •Типы приложений wpf
- •Основные сборки wpf
- •Построение приложения wpf без xaml
- •Построение приложения wpf с использованием только xaml
- •Пример c# обработчика события для контрола, объявленного в xaml (связь кода и xaml):
- •Создание проекта
- •Знакомство с инструментами визуального конструктора wpf
Работа с классами StreamWriter и StreamReader
Классы StreamWriter и StreamReader удобны во всех случаях, когда нужно читать или записывать символьные данные (например, строки). Оба типа работают по умолчанию с символами Unicode, однако их конструкторы поддерживают параметр encoding, позволяющий указывать используемую кодировку.
Класс StreamReader унаследован от абстрактного класса по имени Text Reader. Базовый класс предла- гает очень ограниченный набор функциональности каждому из его наследников, в частности — возможность читать и "заглядывать" (peek) в символьный поток.
Класс StreamWriter наследуется от абстрактного базового класса по имени ТехtWriteг. В этом классе определены члены, позволяющие производным типам записывать текстовые данные в заданный символьный поток.
Основные члены TextWriter:
Close() |
Этот метод закрывает объект-писатель и освобождает все связанные с ним ресурсы. В процессе автоматически сбрасывается буфер (функционально эквивалентен Dispose() ) |
Flush() |
Этот метод очищает все буферы текущего объекта-писателя и записывает все буферизованные данные на лежащее в основе устройство, однако, не закрывает его |
NewLine |
Это свойство задает константу перевода строки. По умолчанию ограничителем строки в Windows является возврат каретки, за которым следует перевод строки (\r\n) |
Write() |
Записывает данные в текстовый поток без добавления константы новой строки |
WriteLine() |
Записывает данные в текстовый поток с добавлением константы новой строки |
Унаследованный класс StreamWriter предоставляет соответствующую реализацию методов Write(), Close() и Flush(), а также определяет дополнительное свойство AutoFlush. Когда это свойство установлено в true, оно заставляет StreamWriter выталкивать данные при каждой операции записи. Можно обеспечить более высокую производительность, установив AutoFlush в false, но при этом необходимо всегда вызывать Close() по завершении работы с StreamWriter.
Запись в текстовый файл:
// Получить StreamWriter и записать строковые данные.
using ( StreamWriter writer = File.CreateText("test.txt") )
{
writer.WriteLine("Line 1");
writer.WriteLine("Line 2");
writer.WriteLine("Line 3");
for ( int i = 0; i < 10; i++ )
writer.Write(i + " ");
// Вставить новую строку.
writer.Write(writer.NewLine);
}
Основные члены TextReader:
Peek() |
Возвращает следующий доступный символ, не изменяя текущей позиции читателя. Значение -1 указывает на достижение конца потока |
Read() |
Читает данные из входного потока |
ReadBlock() |
Читает указанное максимальное количество символов из текущего потока и записывает данные в буфер, начиная с заданного индекса |
ReadLine() |
Читает строку символов из текущего потока и возвращает данные в виде строки (null-строка указывает на признак конца файла (EOF)) |
ReadToEnd() |
Читает все символы от текущей позиции до конца потока и возвращает их в виде одной строки |
Чтение из текстового файла
using ( StreamReader sr = File.OpenText("test.txt") )
{
string input = null;
while ( (input = sr.ReadLine()) != null )
{
Console.WriteLine(input);
}
}
Кроме методов CreateText() типов File или Filelnfo объекты StreamWriter и StreamReader можно создавать напрямую. Например
StreamWriter writer = new StreamWriter("test0.txt");
StreamReader sr = new StreamReader("test1.txt");
