Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
Шрифт:
Интервал:
Закладка:
На заметку! Если вы не работаете на машине с Windows, тогда модифицируйте код, чтобы читать файлы в каком-нибудь каталоге на вашей машине Не забудьте использовать Path.VolumeSeparatorChar и Path.DirectorySeparatorChar, сделав код межплатформенным.
Метод GetFiles() возвращает массив объектов FileInfo, каждый из которых открывает доступ к детальной информации о конкретном файле (тип FileInfo будет подробно описан далее в главе). Создайте в классе Program следующий статический метод:
static void DisplayImageFiles()
{
DirectoryInfo dir = new
DirectoryInfo(@"C:WindowsWebWallpaper");
<b> // Получить все файлы с расширением *.jpg.</b>
FileInfo[] imageFiles =
dir.GetFiles("*.jpg", SearchOption.AllDirectories);
<b> // Сколько файлов найдено?</b>
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(".");
<b> // Создать MyFolder в каталоге запуска приложения.</b>
(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})dir.CreateSubdirectory("MyFolder");
<b> // Создать MyFolder2Data в каталоге запуска приложения.</b>
dir.CreateSubdirectory(
$@"MyFolder2{Path.DirectorySeparatorChar}Data");
}
Получать возвращаемое значение метода CreateSubdirectory() не обязательно, но важно знать, что в случае его успешного выполнения возвращается объект DirectoryInfo, представляющий вновь созданный элемент. Взгляните на следующую модификацию предыдущего метода:
static void ModifyAppDirectory()
{
DirectoryInfo dir = new DirectoryInfo(".");
<b> // Создать MyFolder в начальном каталоге.</b>
dir.CreateSubdirectory("MyFolder");
<b> // Получить возвращенный объект DirectoryInfo.</b>
DirectoryInfo myDataFolder = dir.CreateSubdirectory(
$@"MyFolder2{Path.DirectorySeparatorChar}Data");
<b> // Выводит путь к ..MyFolder2Data.</b>
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()
{
<b> // Вывести список всех логических устройств на текущем компьютере.</b>
string[] drives = Directory.GetLogicalDrives();