|
Программирование >> Обработка исключительных ситуаций
Потоки символов Символьные потоки 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;
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |