
- •Организация c#-системы ввода-вывода: байтовые и символьные потоки. Встроенные потоки.
- •Классы потоков. Класс Stream. Классы байтовых потоков. Классы символьных потоков. Классы двоичных потоков.
- •1.5. Классы символьных потоков:
- •1.6. Классы двоичных потоков:
- •Класс FileStream и файловый ввод-вывод на побайтовой основе. Открытие и закрытие файла. Запись данных в файл. Считывание байтов из объекта класса FileStream.
- •Файловый ввод-вывод с ориентацией на символы. Использование класса StreamWriter. Использование класса StreamReader.
- •Считывание и запись двоичных данных. Класс BinaryWriter. Класс BinaryReader.
- •Наиболее важные методы выходного потока BinaryWriter:
- •Навигация по файловой системе: классы для работы с файловой системой.
- •Получение сведений о файле; копирование файлов; перечисление файлов в папке; изменение расширения файлов.
- •5.3. Изменение расширения файлов
- •Основы организации потоков. Потоки и многозадачность.
- •Пространство имен System.Threading. Класс Thread. Создание потока.
- •Создание потока. Чтобы создать поток, необходимо создать объект типа Thread. В классе Thread определен следующий конструктор: public Thread(ThreadStart entryPoint),
- •Приоритет потоков. Класс Thead поддерживает установку и получение приоритета потока. Для этого используется перечисление ThreadPriority. Его значения:
- •Использование нескольких потоков. Планирование потоков, приоритеты потоков. Можно создавать в программе несколько дочерних потоков.
- •Создать статический метод SimpleWork() в классе MultiThread (перед методом Main), который выводит на экран Id-номер каждого потока:
- •Проблемы одновременности и синхронизации потоков. Общий доступ к данным из разных потоков, предотвращение коллизий.
- •Синхронизация доступа к общим данным с помощью блокировок.
- •2) Выполнить блокировку операторов в ранее используемых методах SimpleWork и run:
- •Управление временем существования потоков.
- •Краткий обзор ado.Net. Три стороны технологии ado.Net. Пространство имен System.Data.
- •2.2 Три стороны технологии ado.Net
- •15.Поставщики данных ado.Net. Поведение объектов подключения.
- •Объектная модель ado.Net.
- •Создание соединения с источником данных. Члены типа dbConnection. Обработка исключений при работе с ms sql
- •Конструкторы
- •Свойства
- •События
- •Конструкторы
- •Свойства
- •Выборка, добавление, удаление и обновление данных с помощью sql-запросов на подсоединенном уровне.
- •Вывод информации с использованием объекта чтения данных: создание SqlDataReader; чтение данных из DataReader; чтение полей из текущей записи; закрытие DataReader.
- •Сравнение DataReader и DataSet:
- •Чтение данных из DataReader:
- •Организация хранения данных. Объект DataSet.
- •Строки: объект DataRow.
- •Конструкторы:
- •Свойства
- •Передача данных между источником данных и объектом DataSet. Обновление базы данных с помощью адаптера данных.
Файловый ввод-вывод с ориентацией на символы. Использование класса StreamWriter. Использование класса StreamReader.
Классы StreamWriter и StreamReader удобны во всех случаях, когда нужно читать или записывать символьные данные (например, текст). Класс StreamReader осуществляет чтение символьных данных из потока и их преобразование. Данный класс унаследован от абстрактного класса по имени TextReader. Класс StreamWriter позволяет осуществлять запись в файл символов и строк и самостоятельно выполняет все необходимые преобразования. Данный класс наследуется от абстрактного базового класса по имени TextWriter.
Наиболее важные методы базового класса TextWriter:
Метод |
Описание |
|
Close () |
Метод закрывает файл и освобождает все связанные с ним ресурсы. В процессе автоматически очищается буфер (функционально эквивалентен методу Dispose()) |
|
Flush () |
Метод очищает все буферы для текущего файла и записывает все буферизованные данные на лежащее в основе устройство, однако, не закрывает файл. |
|
NewLine |
Это свойство задает константу перевода строки. По умолчанию используется последовательность «возврат каретки»– «перевод строки»(\r\n). |
|
Write () |
Метод записывает текст в символьный поток без добавления константы новой строки. |
|
WriteLine () |
Метод записывает строку в поток и переходит на другую строку. |
|
Наиболее важные методы базового класса TextReader:
Метод |
Описание |
|
Peek() |
Метод возвращает следующий символ, не изменяя позицию указателя в файле. |
|
Read() |
Метод считывает данные из входного потока. |
|
ReadBlock() |
Считывает из входного потока указанное пользователем количество символов и записывает их в буфер, начиная с заданной позиции. |
|
ReadLine() |
Считывает строку из текущего потока и возвращает ее как значение типа string. Пустая строка (null) означает конец файла (EOF). |
|
ReadToEnd() |
Считывает все символы до конца потока, начиная с текущей позиции, и возвращает считанные данные как одну строку типа string. |
|
Чтобы создать символьный поток, нужно поместить объект класса Stream (например, FileStream) "внутрь" объекта класса StreamWriter или объекта класса StreamReader. В этом случае байтовый поток будет автоматически преобразовываться в символьный.
Класс StreamWriter предназначен для организации выходного символьного потока. В нем определено несколько конструкторов. Один из них записывается следующим образом: StreamWriter(Stream stream), где параметр stream определяет имя уже открытого байтового потока. Например, создать экземпляр класса StreamWriter можно следующим образом:
StreamWriter fileOut=new StreamWriter(new FileStream("text.txt",FileMode. Create, FileAccess.Write));
Этот конструктор генерирует исключение типа ArgumentException, если поток stream не открыт для вывода, и исключение типа ArgumentNullException, если он (поток) имеет null-значение.Другой вид конструктора позволяет открыть поток сразу через обращение к файлу: StreamWriter(string name), где параметр name определяет имя открываемого файла. Например, обратиться к данному конструктору можно следующим образом: StreamWriter fileOut = new StreamWriter("c:\temp\t.txt");
Имеется еще один вариант конструктора StreamWriter:
StreamWriter(string name, bool appendFlag), где параметр name определяет имя открываемого файла; параметр appendFlag может принимать значение true, если нужно добавлять данные в конец файла, или false — если файл необходимо перезаписать. Например: StreamWriter fileOut = new StreamWriter("t.txt", true);
Теперь для записи данных в поток fileOut можно обратиться к методу WriteLine. Это можно сделать следующим образом: fileOut.WriteLine("test"); В данном случае в конец файла t.txt будет дописано слово test.
Класс StreamReader предназначен для организации входного символьного потока. Один из его конструкторов выглядит следующим образом:
StreamReader(Stream stream), где параметр stream определяет имя уже открытого байтового потока. Этот конструктор генерирует исключение типа ArgumentException, если поток stream не открыт для ввода. Например, создать экземпляр класса StreamReader можно следующим образом:
StreamReader fileln = new StreamReader(new FileStream("text.txt", true,
FileMode.Open, FileAccess.Read));
Как и в случае с классом StreamWriter у класса StreamReader есть и другой вид конструктора, который позволяет открыть файл напрямую: StreamReader (string name), где параметр name определяет имя открываемого файла. Обратиться к данному конструктору можно следующим образом: StreamReader fileln=new StreamReader ("c:\temp\t.txt");В С# символы реализуются кодировкой Unicode. Для того чтобы можно было обрабатывать текстовые файлы, содержащие русский символы, созданные, например, в Блокноте, рекомендуется вызывать следующий вид конструктора StreamReader:
StreamReader fileln=new StreamReader ("c:\temp\t.txt", true, Encoding. GetEncoding( 1251));
Параметр Encoding.GetEncoding(1251) говорит о том, что будет выполняться преобразование из кода Windows-1251 (одна из модификаций кода ASCII, содержащая русские символы) в Unicode. Encoding.GetEncoding(1251) реализован в пространстве имен System.Text.
Теперь для чтения данных из потока fileln можно воспользоваться методом ReadLine(). При этом если будет достигнут конец файла, то метод ReadLine() вернет значение null.