Типы 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 с попытки указать конкретный путь каталога для использования в качестве параметра конструктора. Чтобы получить доступ к текущему каталогу приложения (т.е. к каталогу приложения, выполняющегося в данный момент), используйте обозначение ".". Вот подходящие примеры.
// Привязка к текущему каталогу приложения.
DirectoryInfo dir1 = new DirectoryInfo(".");
// Привязка к C:\Windows с помощью строки,
// для которой указано "дословное" применение.
DirectoryInfo dir2 = new DirectoryInfo(@"C:\Windows");
Во втором примере предполагается, что передаваемый конструктору путь (путь C:\Windows) уже существует на данной физической машине. Если вы попытаетесь взаимодействовать с несуществующим каталогом, будет сгенерировано исключение System.IO.DirectoryNotFoundException (каталог не найден). Поэтому если вы укажете каталог, который еще не создан, то перед его использованием вам придется сначала вызвать метод Create().