Классы Directory и DirectoryInfo

94

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:\MyCode\Testing");
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();
        }
    }
}
Информация о каталоге

В дополнение к получению базовых деталей о существующем каталоге можно расширить текущий пример использованием некоторых методов типа DirectoryInfo. Для начала применим метод GetFiles() для получения информации обо всех файлах *.jpg, расположенных в каталоге C:\Windows\Web\Wallpaper. Если на вашей машине нет каталога C:\Windows\Web\Wallpaper, измените код для чтения файлов из какого-то существующего каталога (например, прочитайте все файлы *.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();
 }
Информация о файлах в директории

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

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

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

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

Пройди тесты
Лучший чат для C# программистов