ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание
Шрифт:
Задачей многих типов, принадлежащих System.IO), является программная поддержка физических операций с каталогами и файлами. Но есть и другие типы, обеспечивающие поддержку операций чтения и записи данных строковых буферов, a также непосредственный доступ к памяти. Чтобы представить вам общую картину функциональных возможностей пространства имен System.IO, в табл. 16.1 описаны его базовые (неабстрактные) классы.
Вдобавок к этим типам, допускающим создание экземпляров, в System.IO определяется целый ряд перечней, а также набор абстрактных классов (Stream, TextReader, TextWriter и т.д.), которые обеспечивают открытый полиморфный интерфейс всем своим производным классам. Более подробная информация об этих типах будет предлагаться в процессе дальнейшего обсуждения материала этой главы.
Таблица 16.1. Ключевые типы пространства имен System.IO
Неабстрактный тип класса ввода-вывода | Описание |
---|---|
BinaryReader BinaryWriter | Позволяют
|
BufferedStream | Обеспечивает временное хранилище для потока байтов, которые можно будет направить в другое хранилище позже |
Directory DirectoryInfо | Используются для работы со структурой каталогов машины. Тип Directory предлагает свои функциональные возможности, в основном через статические методы. Тип DirectoryInfo обеспечивает аналогичные возможности с помощью подходящей объектной переменной |
DriveInfo | Этот тип (появившийся в .NET 2.0) предлагает подробную информацию о дисках, установленных на машине |
File FileInfo | Используются для работы с файлами. Тип File предлагает свои функциональные возможности, в основном через статические методы. Тип FileInfo обеспечивает аналогичные возможности с помощью подходящей объектной переменной |
FileStream | Позволяет реализовать произвольный доступ к файлам (например, поиск), когда данные представлены в виде потока байтов |
FileSystemWatcher | Позволяет контролировать изменения внешнего файла |
MemoryStream | Обеспечивает прямой доступ к данным, сохраненным в памяти, а не в физическом файле |
Path | Выполняет операции с типами System.String, содержащими информацию о файлах или каталогах в независимом от платформы виде |
StreamWriter StreamReader | Используются для записи (и чтения) текстовой информации файлов. Эти типы не поддерживают доступ к файлам с произвольной организацией |
StringWriter StringReader | Подобно типам StreamReader/StreamWriter, эти классы тоже обеспечивают обработку текстовой информации. Однако соответствующим хранилищем в данном случае является строковый буфер, а не физический файл |
Типы Directory(Info) и File(Info)
Пространство System.IO предлагает четыре типа, позволяющие как обработку отдельных файлов, так и взаимодействие со структурой каталогов машины. Первые два из этих типов – Directory и File – с помощью различных статических членов позволяют выполнение операций создания, удаления, копирования и перемещения файлов. Родственные типы FileInfo и DirectoryInfo предлагают аналогичные возможности в виде методов экземпляра (который, таким образом, необходимо будет создать). На рис. 16.1 показана схема зависимости типов, связанных с обработкой каталогов и файлов. Обратите внимание на то, что типы Directory и File расширяют непосредственно System.Object, в то время как DirectoryInfo и FileInfo получаются из абстрактного типа FileSystemInfo.
Рис. 16.1. Типы, обеспечивающие работу с каталогами и файлами
Вообще говоря, FileInfо и DirectoryInfо являются лучшим выбором для рекурсивных операций (таких как, например, составление перечня всех подкаталогов с данным корнем), поскольку члены классов Directory и File обычно возвращает строковые значения, а не строго типизированные объекты.
Абстрактный базовый класс FileSystemInfo
Типы DirectoryInfo и FileInfo во многом наследуют свое поведение от абстрактного базового класса FileSystemInfo. По большей части члены класса FileSystemInfo используются для получения общих характеристик (таких как, например, время создания, различные атрибуты и т.д.) соответствующего файла иди каталога. В табл. 16.2 описаны свойства FileSystemInfo, представляющие наибольший интерес.
Таблица 16.2. Свойства FileSystemInfo
Свойство | Описание |
---|---|
Attributes | Читает или устанавливает атрибуты, связанные с текущим файлом, представленным в перечне FileAttributes |
CreationTime | Читает или устанавливает время создания для текущего файла или каталога |
Exists | Может использоваться для выяснения того, существует ли данный файл или каталог |
Extension | Читает расширение файла |
FullName | Получает полный путь каталога или файла |
LastAccesTime | Читает или устанавливает время последнего доступа к текущему файлу или каталогу |
LastWriteTime | Читает или устанавливает время последнего сеанса записи в текущий файл или каталог |
Name | Для файлов получает имя файла. Для каталогов получает имя последнего каталога в иерархии, если такая иерархия существует. Иначе получает имя каталога |
Тип FileSystemInfo определяет также метод Delete. Этот метод реализуется производными типами для удаления данного файла или каталога с жесткого диска. Кроме того, перед получением информации атрибута может вызываться Refresh, чтобы гарантировать то, что информация о текущем файле (или каталоге) не будет устаревшей.
Работа с типом DirectoryInfo
Первым из рассматриваемых в нашем обсуждении типов, связанных с реализацией ввода-вывода и допускающих создание экземпляров, будет класс DirectoryInfo. Этот класс предлагает набор членов, используемых для создания, перемещения, удаления и перечисления каталогов и подкаталогов. Кроме функциональных возможностей, обеспеченных базовым классом (FileSystemInfo), класс DirectoryInfo предлагает и свои члены, описанные в табл. 16.3.
Таблица 16.3. Основные члены типа DirectoryInfo
Члены | Описание |
---|---|
Create CreateSubdirectory | Создает каталог (или множество подкаталогов) в соответствии с заданным именем пути |
Delete | Удаляет каталог и все его содержимое |
GetDirectories | Возвращает массив строк, представляющих все подкаталоги текущего каталога |
GetFiles | Получает массив типов FileInfo, представляющих множество файлов данного каталога |
MoveTo | Перемещает каталог и его содержимое в место, соответствующее заданному новому пути |
Parent | Получает каталог родителя указанного пути |
Root | Получает корневую часть пути |
Мы начнем работу с типом DirectoryInfo с попытки указать конкретный путь каталога для использования в качестве параметра конструктора. Чтобы получить доступ к текущему каталогу приложения (т.е. к каталогу приложения, выполняющегося в данный момент), используйте обозначение ".". Вот подходящие примеры.
Во втором примере предполагается, что передаваемый конструктору путь (путь C:\Windows) уже существует на данной физической машине. Если вы попытаетесь взаимодействовать с несуществующим каталогом, будет сгенерировано исключение System.IO.DirectoryNotFoundException (каталог не найден). Поэтому если вы укажете каталог, который еще не создан, то перед его использованием вам придется сначала вызвать метод Create.
После создания объекта DirectoryInfo вы можете исследовать содержимое соответствующего каталога с помощью свойств, унаследованных от FileSystemInfo. Например, следующий класс создает новый объект DirectoryInfo, связанный с C:\Windows (при необходимости измените этот путь в соответствии с установками системы на вашей машине) и отображающий ряд интересных статистических данных об указанном каталоге (рис. 16.2).