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

ЖАНРЫ

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

Первый неабстрактный тип, связанный с вводом-выводом, который мы исследуем здесь —

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

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

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

// Привязаться к текущему рабочему каталогу.

DirectoryInfo dir1 = new DirectoryInfo(".");

// Привязаться к C:\Windows, используя дословную строку.

DirectoryInfo dir2 = new DirectoryInfo(@"C:\Windows");

Во втором примере предполагается, что путь, передаваемый конструктору (

С:\Windows
), уже существует на физической машине. Однако при попытке взаимодействия с несуществующим каталогом генерируется исключение
System.IO.DirectoryNotFoundException
. Таким образом, чтобы указать каталог, который пока еще не создан, перед работой с ним понадобится вызвать метод
Create
:

// Привязаться к несуществующему каталогу, затем создать его.

DirectoryInfo dir3 = new DirectoryInfo(@"C:\MyCode\Testing");

dir3.Create;

Синтаксис пути, используемый в предыдущем примере, ориентирован на Windows. Если вы разрабатываете приложения .NET Core для разных платформ, тогда должны применять конструкции

Path.VolumeSeparatorChar
и
Path.DirectorySeparatorChar
, которые будут выдавать подходящие символы на основе платформы. Модифицируйте предыдущий код, как показано ниже:

DirectoryInfo dir3 = new DirectoryInfo(

$@"C{Path.VolumeSeparatorChar}{Path.DirectorySeparatorChar}

MyCode{Path.DirectorySeparatorChar}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

{

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

// управлением 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
, расположенных в каталоге
С:\Windows\Web\Wallpaper
.

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

Path.VolumeSeparatorChar
и
Path.DirectorySeparatorChar
, сделав код межплатформенным.

Метод

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

static void DisplayImageFiles

{

DirectoryInfo dir = new

DirectoryInfo(@"C:\Windows\Web\Wallpaper");

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

FileInfo[] imageFiles =

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

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

Console.WriteLine("Found {0} *.jpg files\n", 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); // Атрибуты

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