Программирование >>  Обработка исключительных ситуаций 

1 ... 81 82 83 [ 84 ] 85 86 87 ... 142


Потоки символов

Символьные потоки StreamWriter и StreamReader работают с Unicode-символами1, следовательно, ими удобнее всего пользоваться для работы с файлами, предназначенными для восприятия человеком. Эти потоки являются наследниками классов TextWriter и TextReader соответственно, которые обеспечивают их большей частью функциональности. В табл. 11.6 и 11.7 приведены наиболее важные элементы этих классов. Как видите, произвольный доступ для текстовых файлов не поддерживается.

Таблица 11.6. Наиболее важные элементы базового класса TextWriter Элемент Описание

Close Закрыть файл и освободить связанные с ним ресурсы. Если в процессе

записи используется буфер, он будет автоматически очищен

Fl ush Очистить все буферы для текущего файла и записать накопленные

в них данные в место их постоянного хранения. Сам файл при этом не закрывается

продолжение

1 Существует возможность изменить используемую кодировку с помощью объекта System. Text.Encoding.

&

Для удобства восприятия операции чтения из файла и диалога с пользователем оформлены в отдельный класс Demo.

Метод OnCompletedRead (оператор 1) должен получать один параметр стандартного типа IAsyncResult, содержащий сведения о завершении операции, которые передаются в метод EndRead.

Файл открывается в асинхронном режиме, об этом говорит значение true последнего параметра конструктора (оператор 2). В операторе 3 создается экземпляр стандартного делегата AsyncCallback, который инициализируется методом OnCompletedRead.

С помощью этого делегата метод OnCompletedRead передается в методBeginRead (оператор 4), который создает отдельный поток, начинает асинхронный ввод и возвращает управление в вызвавший поток. Обратный вызов метода OnCompletedRead происходит при завершении операции ввода. При достаточно длинном файле verybigfile можно убедиться, что приглашение к вводу в методе Userlnput в1дается раньше, чем сообщение о завершении операции ввода из метода OnCompletedRead.

ПРИМЕЧАНИЕ-

Пример, приведенный в листинге 11.2, максимально упрощен для демонстрации методов BeginRead и EndRead, поэтому в нем нет необходимых в любой программе проверок наличия файла, успешности считывания и т. д.



Таблица 11.6 {продолжение) Элемент Описание

NewLine Используется для задания последовательности символов, означающих

начало новой строки. По умолчанию используется последовательность возврат каретки - перевод строки (\г\п)

Write Записать фрагмент текста в поток

Wri teLi пе Записать строку в поток и перейти на другую строку

Таблица 11.7. Наиболее важные элементы класса TextReader Элемент Описание

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

Peek

Read

ReadBlock

Считать из входного потока указанное пользователем количество символов и записать их в буфер, начиная с заданной позиции

ReadLine Считать строку из текущего потока и возвратить ее как значение типа stri ng. Пустая строка (nul 1) означает конец файла (EOF)

ReadToEnd Считать все символы до конца потока, начиная с текущей позиции, и возвратить считанные данные как одну строку типа stri ng

Вы уже знакомы с некоторыми методами, приведенными в этих таблицах: на протяжении всей книги постоянно использовались методы чтения из текстовых потоков и записи в текстовые потоки, но не для дисковых файлов, а для консоли, которая является их частным случаем.

В листинге 11.3 создается текстовый файл, в который записываются две строки. Вторая строка формируется из преобразованных численных значений переменных и поясняющего текста. Содержимое файла можно посмотреть в любом текстовом редакторе. Файл создается в том же каталоге, куда среда записывает исполняемый файл. По умолчанию это каталог ...\ConsoleApplication1\bin\Debug.

Листинг 11.3. Вывод в текстовый файл

using System;

using System.10;

namespace ConsoleApplicationl

{ class Classl

{ static void MainO

StreamWriter f = new StreamWriterC text.txt );

f.WriteLineC В1вод в текс-И)вый файл: ); double а = 12.234;



catch( Exception e )

Console.WriteLineC Error: + e.Message ); return;

В листинге 11.4 файл, созданный в пред1дущем листинге, выводится на экран.

Листинг 11.4. Чтение текстового файла

using System; using System.10; namespace ConsoleApplicationi { class Classl

{ static void MainO {

StreamReader f = new StreamReaderC text.txt );

string s = f.ReadToEndO; Console.WriteLine(s);

f.CloseO:

catchC FileNotFoundException e )

Console.WriteLineC e.Message );

Console.WriteLineC Проверьте правильность ме файла! ): return;

catch( Exception e )

Console.WriteLineC Error: + e.Message ); return;

int b = 29:

f.WriteLineC a = {0.6:C} b = {1.2:X}\ a. b ); f.CloseO;



1 ... 81 82 83 [ 84 ] 85 86 87 ... 142

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика