Работа с каталогами (папками) 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Работа с каталогами (папками)



Для решения этих задач можно использовать класс DirectoryInfo.

Для начала с помощью свойства RootDirectory класса DriveInfo получим доступ к объекту DirectoryInfo, представляющему корневой каталог некоторого диска (в примере – второго диска):

DirectoryInfo rootDir = allDrives[1].RootDirectory;

Console.WriteLine(rootDir.FullName); //выводит полное имя

Далее выведем список имен подкаталогов корневого каталога. Здесь используется метод GetDirectories:

Console.WriteLine("Подкаталоги");

foreach (DirectoryInfo di in rootDir.GetDirectories())

Console.WriteLine(" {0}",di.Name);

Аналогично с помощью метода GetFiles выведем список имен файлов (объекты FileInfo):

Console.WriteLine("Файлы");

foreach (FileInfo fi in rootDir.GetFiles())

Console.WriteLine(" {0}", fi.Name);

Часто приходится осуществлять перебор каталогов не только непосредственно внутри заданного каталога, но и на всю глубину вложенности. Для этого обычно реализуют рекурсивный алгоритм, подобный следующему:

static void TraverseDirectory(DirectoryInfo curDir, string level)

{ Console.WriteLine(level + curDir.Name);

foreach (DirectoryInfo di in curDir.GetDirectories())

TraverseDirectory(di, level + " ");

foreach (FileInfo fi in curDir.GetFiles())

Console.WriteLine(level + " " + "{0}", fi.Name);

}

Строковая переменная level помогает выводит имена файлов и каталогов с текстовыми отступами, соответствующими их уровням.

Поскольку файловая система имеет правильную древовидную организацию, каждое рекурсивное «погружение» обязательно приведет на тот уровень вложенности, где уже нет подкаталогов. В этом случае цикл foreach, осуществляющий рекурсивные вызовы будет пустым. Таким образом, все процедура обхода не окажется бесконечной. Однако применять этот прием нужно с осторожностью, поскольку на интенсивно используемом компьютере образуется чрезвычайно многоуровневая система каталогов и выполнение такого рекурсивного алгоритма приведет к исчерпанию вычислительных ресурсов (обычно такая ситуация формулируется как Stack Overflow). Потому без необходимости не применяйте этот прием для всего логического диска:

DriveInfo[] allDrives = DriveInfo.GetDrives();

DirectoryInfo rootDir = allDrives[1].RootDirectory;

Лучше определить конкретный каталог для перебора:

DirectoryInfo rootDir = new DirectoryInfo(@"D:\WORK\Крыша");

TraverseDirectory(rootDir, "");

Для получения информации о характеристиках каталогов в классе DirectoryInfo имеется несколько свойств.

Свойства только для чтения:

Exists наличие каталога.

FullName         полный путь к каталогу.

Extension        строка, содержащая расширение каталога.

Name имя каталога

Parent родительский каталог заданного подкаталога.

Root  корневой элемент пути.

Свойства для чтения и записи:

Attributes         атрибуты каталога

CreationTime время создания каталога

LastAccessTime время последнего доступа к текущему каталогу.

LastWriteTime время последней операции записи в текущий каталог.

Как видите, размер каталога Вам не предоставляется. Его придется вичислять самостоятельно рекурсивно.

Рассмотренные возможности предоставляли доступ к информации о каталогах «по чтению». Класс DirectoryInfo предоставляет и возможности «активной» работы с каталогами. Как правило, для того, чтобы выполнить какое-либо действие, связанное с каталогами, нужно сначала создать программный объект-каталог, указав его адрес:

DirectoryInfo di1 = new DirectoryInfo(@"c:\MyDir");

Это возможно как для уже физически существующего каталога, так и для вновь создаваемого.

Создание каталога.

di1.Create();



Поделиться:


Последнее изменение этой страницы: 2021-12-15; просмотров: 45; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.119.213.110 (0.006 с.)