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

2.3. Текстовые файлы

Несмотря на то, что байтовая обработка данных получила широкое распространение, C# также поддерживает работу с символьными потоками, а, следовательно, с текстовыми файлами. Символьные потоки работают непосредственно с Unicode-символами. В общем случае, чтобы выполнять файловые операции с текстом, нужно поместить объект класса FileStream внутрь объекта класса StreamReader или класса StreamWriter. Эти классы автоматически преобразуют байтовый поток в символьный и наоборот. Иерархия классов, предназначенных для работы с текстовыми файлами, приведена на рисунке 4.2.

Рис. 4.2. Иерархия классов работы с текстовыми файлами

В классах StreamWriter и StreamReader определено несколько конструкторов. Чаще всего используются следующий формат:

StreamWriter(Stream stream)

StreamReader(Stream stream)

Здесь элемен stream означает имя открытого потока. Эти конструкторы генерируют исключения типа ArgumentException, если поток stream не открыт для вывода или ввода соответственно, и исключение типа ArgumentNullException, если он (поток) имеет null-значение. Созданные объекты автоматически выполняют преобразование символов в байты или наоборот.

Иногда удобнее открывать файл с помощью классов StreamWriter и StreamReader. Для этого используются следующие конструкторы:

StreamWriter(string filename)

StreamReader(string filename)

Здесь элемент filename означает имя открываемого файла, причем имя может включать полный путь к файлу.

Значительная часть функциональных возможностей класса StreamWriter обеспечивается при помощи компонентов, унаследованных от TextWriter. Эти компоненты представлены в таблице:

Компонент

Описание

Методы

virtual void Close()

Закрывает соответствующий объект Writer

virtual void Flush()

Очищает все буферы для текущего объекта Writer и записывает накопленные в них данные в место их постоянного хранения, но при этом сам объект Writer не закрывается

virtual void Write(...)

Перегруженный метод. Записывает данные требуемого типа в текстовом формате в поток без перевода строки

virtual void WriteLine(...)

Перегруженный метод. Записывает данные требуемого типа в текстовом формате в поток с переводом строки

Свойство

virtual string NewLine

Получает или устанавливает последовательность символов, означающих начало новой строки. По умолчанию - \r\n

Соответственно, большинство компонентов класса StreamReader для чтения из текстового файла унаследовано от класса TextReader:

Методы

Описание

virtual void Close()

Закрывает соответствующий объект Reader

virtual int Peek()

Возвращает следующий символ, не изменяя позицию указателя в файле

virtual int Read()

Считывает данные из потока на входе

virtual int ReadBlock (char[] buffer, int index, int count)

Считывает count символов, начиная с позиции index, и записывает считанные данные в буфер buffer

virtual string ReadLine()

Считывает строку данных из текущего потока. Пустая строка (null string) означает конец файла (EOF)

virtual string ReadToEnd()

Считывает все символы с текущей позиции до конца потока