|
Программирование >> Обработка исключительных ситуаций
Глава 11 Работа с файлами Под файлом обычно подразумевается именованная информация на внешнем носителе, например на жестком или гибком магнитном диске. Логически файл можно представить как конечное количество последовательных байтов, поэтому такие устройства, как дисплей, клавиатура и принтер, также можно рассматривать как частные случаи файлов. Передача данных с внешнего устройства в оперативную память называется чтением, или вводом, обратн1й процесс - записью, или выводом. Ввод-вывод в С# выполняется с помощью подсистемы ввода-вывода и классов библиотеки .NET. В этой главе рассматривается обмен данными с файлами и их частн1м случаем - консолью. Обмен данными реализуется с помощью потоков. Поток (stream)1 - это абстрактное понятие, относящееся к любому переносу данных от источника к приемнику. Потоки обеспечивают надежную работу как со стандартными, так и с определенными пользователем типами данных, а также единообразный и понятный синтаксис. Поток определяется как последовательность байтов и не зависит от конкретного устройства, с которым производится обмен (оперативная память, файл на диске, клавиатура или принтер). Обмен с потоком для повышения скорости передачи данных производится, как правило, через специальную область оперативной памяти - буфер. Буфер в1де-ляется для каждого открытого файла. При записи в файл вся информация сначала направляется в буфер и там накапливается до тех пор, пока весь буфер не заполнится. Только после этого или после специальной команды сброса происходит передача данных на внешнее устройство. При чтении из файла данные вначале считываются в буфер, причем не столько, сколько запрашивается, а сколько помещается в буфер. Механизм буферизации позволяет более быстро и эффективно обмениваться информацией с внешними устройствами. 1 Не путать с потоком выполпепия, описаппым в предыдущей главе. Впрочем, и в обгч-ной речи мы часто обозначаем одним и тем же словом совершенно разные вещи! Для поддержки потоков библиотека .NET содержит иерархию классов, основная часть которой представлена на рис. 11.1. Эти классы определены в пространстве имен System. 10. Помимо классов там описано большое количество перечислений для задания различных свойств и режимов. Рис. 11.1. Классы библиотеки .NET для работы с потоками Классы библиотеки позволяют работать в различных режимах с файлами, каталогами и областями оперативной памяти. Краткое описание классов приведено в табл. 11.1. Таблица 11.1. Класс BinaryReader, BinaryWriter BufferedStream Directory, Directorylnfo, Filelnfo FileStream MemoryStream Основные классы пространства имен SystemЮ Описание Чтение и запись значений простгх встроеннгх типов (целочисленных, логических, строковых и т. п.) во внутренней форме представления Временное хранение потока байтов (например, для последующего переноса в постоянное хранилище) Работа с каталогами или физическими файлами: создание, удаление, File, получение свойств. Возможности классов Fi 1 е и Di rectory реализованы в основном в виде статических методов. Аналогичные классы Directorylnfo и Filelnfo используют обгчные метод1 Произвольный (прямой) доступ к файлу, представленному как поток байтов Произвольный доступ к потоку байтов в оперативной памяти Класс Описание StreamWriter, Чтение из файла и запись в файл текстовой информации StreamReader (произвольн1й доступ не поддерживается) StringWriter, Работа с текстовой информацией в оперативной памяти StringReader Как можно видеть из таблицы, выполнять обмен с внешними устройствами можно на уровне: двоичного представления данных (BinaryReader, BinaryWriter); байтов (FileStream); текста, то есть символов (StreamWriter, StreamReader). В .NET используется кодировка Unicode, в которой каждый символ кодируется двумя байтами. Классы, работающие с текстом, являются оболочками классов, использующих байты, и автоматически выполняют перекодирование из байтов в символы и обратно. Двоичные и байтовые потоки хранят данные в том же виде, в котором они представлены в оперативной памяти, то есть при обмене с файлом происходит побитовое копирование информации. Двоичные файлы применяются не для просмотра их человеком, а для использования в программах. Доступ к файлам может быть последовательным, когда очередной элемент можно прочитать (записать) только после аналогичной операции с предыдущим элементом, и произвольным, или прямым, при котором выполняется чтение (запись) произвольного элемента по заданному адресу. Текстовые файлы позволяют выполнять только последовательный доступ, в двоичных и байтовых потоках можно использовать оба метода. Прямой доступ в сочетании с отсутствием преобразований обеспечивает высокую скорость получения нужной информации. ПРИМЕЧАНИЕ- Метод1 форматированного ввода, с помощью которых можно выполнять ввод с кла виатуры или из текстового файла значений арифметических типов, в С# не под держиваются. Для преобразования из символьного в числовое представлен используются методы класса Convert или метод Parse, рассмотренные в раздел- Простейший ввод-вывод (см. с. 59). ПРИМЕЧАНИЕ Форматированный вывод, то есть преобразование из внутренней форм1 предста! ления числа в символьную, понятную человеку, в1полняется с помощью перегр] женных методов ToString, результаты выполнения которых передаются в метод текстовгх файлов. Помимо перечисленных классов в библиотеке .NET есть классы XmlTextReadf и XmlTextWriter, предназначенные для формирования и чтения кода в форма XML. Понятие об XM L дается в главе 15. Таблица 11.1 (продолжение)
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |