Чтение онлайн

ЖАНРЫ

Язык программирования C#9 и платформа .NET5
Шрифт:

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

}

}

Обратите внимание на указание в вызове

GetFiles
варианта поиска;
SearchOption.AllDirectories
обеспечивает просмотр всех подкаталогов корня. В результате запуска приложения выводится список файлов, которые соответствуют поисковому шаблону.

Создание подкаталогов с помощью типа DirectoryInfo

Посредством метода

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

static void ModifyAppDirectory

{

DirectoryInfo dir = new DirectoryInfo(".");

// Создать \MyFolder в каталоге запуска приложения.

dir.CreateSubdirectory("MyFolder");

// Создать \MyFolder2\Data в каталоге запуска приложения.

dir.CreateSubdirectory(

$@"MyFolder2{Path.DirectorySeparatorChar}Data");

}

Получать возвращаемое значение метода

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

static void ModifyAppDirectory

{

DirectoryInfo dir = new DirectoryInfo(".");

// Создать \MyFolder в начальном каталоге.

dir.CreateSubdirectory("MyFolder");

// Получить возвращенный объект DirectoryInfo.

DirectoryInfo myDataFolder = dir.CreateSubdirectory(

$@"MyFolder2{Path.DirectorySeparatorChar}Data");

// Выводит путь к ..\MyFolder2\Data.

Console.WriteLine("New Folder is: {0}", myDataFolder);

}

Вызвав метод

ModifyAppDirectory
в операторах верхнего уровня и запустив программу, в проводнике Windows можно будет увидеть новые подкаталоги.

Работа с типом Directory

Вы видели тип

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

Давайте взглянем на функциональность типа Directory; показанный ниже вспомогательный метод отображает имена всех логических устройств на текущем компьютере (с помощью метода

Directory.GetLogicalDrives
) и применяет статический метод
Directory.Delete
для удаления созданных ранее подкаталогов
\MyFolder
и
\MyFolder2\Data
:

static void FunWithDirectoryType

{

// Вывести список всех логических устройств на текущем компьютере.

string[] drives = Directory.GetLogicalDrives;

Console.WriteLine("Here are your drives:");

foreach (string s in drives)

{

Console.WriteLine("--> {0} ", s);

}

// Удалить ранее созданные подкаталоги.

Console.WriteLine("Press Enter to delete directories");

Console.ReadLine;

try

{

Directory.Delete("MyFolder");

// Второй параметр указывает, нужно ли удалять внутренние подкаталоги.

Directory.Delete("MyFolder2", true);

}

catch (IOException e)

{

Console.WriteLine(e.Message);

}

}

Работа с типом DriveInfo

Пространство имен

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

using System;

using System.IO;

// Получить информацию обо всех устройствах.

DriveInfo[] myDrives = DriveInfo.GetDrives;

// Вывести сведения об устройствах.

foreach(DriveInfo d in myDrives)

{

Console.WriteLine("Name: {0}", d.Name); // имя

Console.WriteLine("Type: {0}", d.DriveType); // тип

// Проверить, смонтировано ли устройство.

if(d.IsReady)

{

Console.WriteLine("Free space: {0}", d.TotalFreeSpace);

// свободное пространство

Console.WriteLine("Format: {0}", d.DriveFormat); // формат устройства

Console.WriteLine("Label: {0}", d.VolumeLabel); // метка тома

}

Console.WriteLine;

Поделиться с друзьями: