Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
Шрифт:
Интервал:
Закладка:
В классе FileSystemInfо также определен метод Delete(). Он реализуется производными типами для удаления заданного файла или каталога с жесткого диска. Кроме того, перед получением информации об атрибутах можно вызвать метод Refresh(), чтобы обеспечить актуальность статистических данных о текущем файле или каталоге.
Работа с типом DirectoryInfо
Первый неабстрактный тип, связанный с вводом-выводом, который мы исследуем здесь — DirectoryInfo. Этот класс содержит набор членов, используемых для создания, перемещения, удаления и перечисления каталогов и подкаталогов. В дополнение к функциональности, предоставленной его базовым классом (FileSystemInfо), класс DirectoryInfo предлагает ключевые члены, описанные в табл. 20.3.
Работа с типом DirectoryInfo начинается с указания отдельного пути в параметре конструктора. Если требуется получить доступ к текущему рабочему каталогу (каталогу выполняющегося приложения), то следует применять обозначение в виде точки (.). Вот некоторые примеры:
<b>// Привязаться к текущему рабочему каталогу.</b>
DirectoryInfo dir1 = new DirectoryInfo(".");
<b>// Привязаться к C:Windows, используя дословную строку.</b>
DirectoryInfo dir2 = new DirectoryInfo(@"C:Windows");
Во втором примере предполагается, что путь, передаваемый конструктору (С:Windows), уже существует на физической машине. Однако при попытке взаимодействия с несуществующим каталогом генерируется исключение System.IO.DirectoryNotFoundException. Таким образом, чтобы указать каталог, который пока еще не создан, перед работой с ним понадобится вызвать метод Create():
<b>// Привязаться к несуществующему каталогу, затем создать его.</b>
DirectoryInfo dir3 = new DirectoryInfo(@"C:MyCodeTesting");
dir3.Create();
Синтаксис пути, используемый в предыдущем примере, ориентирован на Windows. Если вы разрабатываете приложения .NET Core для разных платформ, тогда должны применять конструкции Path.VolumeSeparatorChar и Path.DirectorySeparatorChar, которые будут выдавать подходящие символы на основе платформы. Модифицируйте предыдущий код, как показано ниже:
DirectoryInfo dir3 = new DirectoryInfo(
$@"C{<b>Path.VolumeSeparatorChar}{Path.DirectorySeparatorChar}</b>
<b> MyCode{Path.DirectorySeparatorChar</b>}Testing");
После создания объекта DirectoryInfo можно исследовать содержимое лежащего в основе каталога с помощью любого свойства, унаследованного от FileSystemInfo. В целях иллюстрации создайте новый проект консольного приложения по имени DirectorуАрр и импортируйте в файл кода C# пространства имен System и System.IO. Измените класс Program, добавив представленный далее новый статический метод, который создает объект DirectoryInfo, отображенный на С:Windows (при необходимости подкорректируйте путь), и выводит интересные статистические данные:
(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})using System;
using System.IO;
Console.WriteLine("***** Fun with Directory(Info) *****n");
ShowWindowsDirectoryInfo();
Console.ReadLine();
static void ShowWindowsDirectoryInfo()
{
<b> // Вывести информацию о каталоге. В случае работы не под</b>
<b> // управлением Windows подключитесь к другому каталогу.</b>
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.