В классе
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:\MyCode\Testing");
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
(при необходимости подкорректируйте путь), и выводит интересные статистические данные:
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
, расположенных в каталоге
С:\Windows\Web\Wallpaper
.