Рейтинговые книги
Читем онлайн Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 235 236 237 238 239 240 241 242 243 ... 407
далее новый статический метод, который создает объект DirectoryInfo, отображенный на С:Windows (при необходимости подкорректируйте путь), и выводит интересные статистические данные:

using System;

using System.IO;

Console.WriteLine("***** Fun with Directory(Info) *****n");

ShowWindowsDirectoryInfo();

Console.ReadLine();

static void ShowWindowsDirectoryInfo()

{

  // Вывести информацию о каталоге. В случае работы не под

  // управлением Windows подключитесь к другому каталогу.

  DirectoryInfo dir = new DirectoryInfo($@"C{Path.VolumeSeparatorChar}

  {Path.DirectorySeparatorChar}Windows");

  Console.WriteLine("***** Directory Info *****");

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

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

  Console.WriteLine("Name: {0}", dir.Name);             // Имя каталога

  Console.WriteLine("Parent: {0}", dir.Parent);         // Родительский каталог

  Console.WriteLine("Creation: {0}", dir.CreationTime); // Время создания

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

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

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

}

Вывод у вас может отличаться, но быть похожим:

***** Fun with Directory(Info) *****

***** Directory Info *****

FullName: C:Windows

Name: Windows

Parent:

Creation: 3/19/2019 00:37:22

Attributes: Directory

Root: C:

**************************

Перечисление файлов с помощью типа DirectoryInfо

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

На заметку! Если вы не работаете на машине с Windows, тогда модифицируйте код, чтобы читать файлы в каком-нибудь каталоге на вашей машине  Не забудьте использовать Path.VolumeSeparatorChar и Path.DirectorySeparatorChar, сделав код межплатформенным.

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

static void DisplayImageFiles()

{

  DirectoryInfo dir = new

    DirectoryInfo(@"C:WindowsWebWallpaper");

  // Получить все файлы с расширением *.jpg.

  FileInfo[] imageFiles =

    dir.GetFiles("*.jpg", SearchOption.AllDirectories);

  // Сколько файлов найдено?

  Console.WriteLine("Found {0} *.jpg filesn", imageFiles.Length);

  // Вывести информацию о каждом файле.

  foreach (FileInfo f in imageFiles)

  {

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

    Console.WriteLine("File name: {0}", f.Name          // Имя файла

    Console.WriteLine("File size: {0}", f.Length);      // Размер

    Console.WriteLine("Creation: {0}", f.CreationTime); // Время создания

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

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

  }

}

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

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

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

static void ModifyAppDirectory()

{

  DirectoryInfo dir = new DirectoryInfo(".");

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

  dir.CreateSubdirectory("MyFolder");

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

  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");

  // Выводит путь к ..MyFolder2Data.

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

}

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

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

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

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

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);

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

1 ... 235 236 237 238 239 240 241 242 243 ... 407
На этой странице вы можете бесплатно читать книгу Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен бесплатно.

Оставить комментарий