DirectoryInfo содержит набор членов, используемых для создания, перемещения, удаления и перечисления каталогов и подкаталогов. В дополнение к функциональности, предоставленной базовым классом (FileSystemInfo), DirectoryInfo предлагает ключевые члены, перечисленные ниже:

Create(), CreateSubdirectorу()
Создает каталог (или набор подкаталогов) по заданному путевому имени

Delete()
Удаляет каталог и все его содержимое

GetDirectories()
Возвращает массив объектов DirectoryInfo, представляющих все подкаталоги в текущем каталоге

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:MyCodeTesting");
dir3.Create();

После создания объекта DirectoryInfo можно исследовать его содержимое, используя любое свойство, унаследованное от FileSystemInfo. Например:

using System;
using System.IO;

namespace ConsoleApplication15_DirectoryInfo
{
    class Program
    {
        static void Main()
        {
            ShowWindowsDirectoryInfo();
        }

        // Выводим информацию о каталоге
        static void ShowWindowsDirectoryInfo()
        {
            DirectoryInfo dir = new DirectoryInfo(@"C:Windows");
            Console.WriteLine("***** Информация о каталоге *****n");
            Console.WriteLine("Полный путь: {0}nНазвание папки: {1}nРодительский каталог: {2}n" +
                         "Время создания: {3}nАтрибуты: {4}nКорневой каталог: {5}",
                         dir.FullName,dir.Name,dir.Parent,dir.CreationTime,dir.Attributes,dir.Root);
            Console.ReadLine();
        }
    }
}
klassiy-directory-i-directoryinfo-1

В дополнение к получению базовых деталей о существующем каталоге можно расширить текущий пример использованием некоторых методов типа DirectoryInfo. Для начала применим метод GetFiles() для получения информации обо всех файлах *.jpg, расположенных в каталоге C:WindowsWebWallpaper. Если на вашей машине нет каталога C:WindowsWebWallpaper, измените код для чтения файлов из какого-то существующего каталога (например, прочитайте все файлы *.bmp из каталога C:Windows).

Метод GetFiles() возвращает массив объектов типа FileInfo, каждый из которых представляет детальную информацию о конкретном файле. Предположим, что следующий статический метод класса Program вызывается в методе Main():

static void ImageDisplayFiles()
 {
            DirectoryInfo dir = new DirectoryInfo("C:\Windows\Web\Wallpaper");

            // Получить все файлы с расширением .jpg
            FileInfo[] imageFiles = dir.GetFiles("*.jpg",SearchOption.AllDirectories);

            // Сколько файлов найдено
            Console.WriteLine("Найдено {0} картинок",imageFiles.Length);

            // Вывести информацию о каждом файле
            foreach (FileInfo f in imageFiles)
            {
                Console.WriteLine("n******************n");
                Console.WriteLine("Имя файла: "+f.Name);
                Console.WriteLine("Размер файла: "+f.Length);
                Console.WriteLine("Время создания файла: " + f.CreationTime);
            }
            Console.ReadLine();
 }
klassiy-directory-i-directoryinfo-2

Обратите внимание на указание в вызове GetFiles() опции поиска; SearchOption.AllDirectories обеспечивает просмотр всех подкаталогов корня. После запуска этого приложения получается список файлов, отвечающих критерию поиска.

После опробования типа DirectoryInfo в действии можно приступать к изучению типа Directory. По большей части статические члены Directory повторяют функциональность, предоставленную членами уровня экземпляра, которые определены в DirectoryInfo. Вспомните, однако, что члены Directory обычно возвращают строковые данные вместо строго типизированных объектов Filelnfo/DirectoryInfo.

Пространство имен System.IO включает класс DriveInfo. Подобно Directory.GetLogicalDrives(), статический метод DriveInfo.GetDrives() позволяет получить имена дисковых приводов машины.

Однако, в отличие от Directory.GetLogicalDrives(), DriveInfo предоставляет множество дополнительных деталей (таких как тип привода, доступное свободное пространство и метка тома).