Шрифт:
Таблица 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.