Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Работа с каталогами (папками)
Для решения этих задач можно использовать класс 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 с.) |