Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Троелсен Э. Язык программирования С# 2010 и п...docx
Скачиваний:
113
Добавлен:
21.09.2019
Размер:
6.92 Mб
Скачать

Типы 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 с попытки указать конкретный путь каталога для использования в качестве параметра конструктора. Чтобы получить доступ к текущему каталогу приложения (т.е. к каталогу приложения, выполняющегося в данный момент), используйте обозначение ".". Вот подходящие примеры.

// Привязка к текущему каталогу приложения.

DirectoryInfo dir1 = new DirectoryInfo(".");

// Привязка к C:\Windows с помощью строки,

// для которой указано "дословное" применение.

DirectoryInfo dir2 = new DirectoryInfo(@"C:\Windows");

Во втором примере предполагается, что передаваемый конструктору путь (путь C:\Windows) уже существует на данной физической машине. Если вы попытаетесь взаимодействовать с несуществующим каталогом, будет сгенерировано исключение System.IO.DirectoryNotFoundException (каталог не найден). Поэтому если вы укажете каталог, который еще не создан, то перед его использованием вам придется сначала вызвать метод Create().

// Привязка к несуществующему каталогу с последующим его созданием.

DirectoryInfo dir3 = new DirectoryInfo(@"C:\Window\Testing");

dir3.Create();

После создания объекта DirectoryInfo вы можете исследовать содержимое соответствующего каталога с помощью свойств, унаследованных от FileSystemInfo. Например, следующий класс создает новый объект DirectoryInfo, связанный с C:\Windows (при необходимости измените этот путь в соответствии с установками системы на вашей машине) и отображающий ряд интересных статистических данных об указанном каталоге (рис. 16.2).

class Program {

 static void Main(string[] args) {

  Console.WriteLine("***** Забавы с Directory(Info) *****\n");

  DirectoryInfo dir = new DirectoryInfo(@"C:\Windows");

  // Информация о каталоге.

  Console.WriteLine("***** Информация о каталоге *****");

  Console.WriteLine("Полное имя: {0} ", dir.FullName);

  Console.WriteLine("Имя: {0} ", dir.Name);

  Console.WriteLine("Родитель: {0} ", dir.Parent);

  Console.WriteLine("Создан: {0} "dir.CreationTime);

  Console.WriteLine("Атрибуты: {0} ", dir.Attributes);

  Console.WriteLine("Корневой каталог: {0}", dir.Root);

  Console.WriteLine("********************************\n");

 }

}

Рис. 16.2. Информация о каталоге Windows