Документ файла Compote хранится в каком-то каталоге после того, как в этом каталоге был создан подкаталог

Обновлено: 21.11.2024

В этой главе мы подробно обсудим управление каталогами в Unix.

Каталог — это файл, единственная задача которого — хранить имена файлов и связанную с ними информацию. Все файлы, будь то обычные, специальные или каталоги, содержатся в каталогах.

Unix использует иерархическую структуру для организации файлов и каталогов. Эту структуру часто называют деревом каталогов. Дерево имеет один корневой узел, символ косой черты (/), а все остальные каталоги находятся под ним.

Домашний каталог

Каталог, в котором вы оказались при первом входе в систему, называется вашим домашним каталогом.

Вы будете выполнять большую часть своей работы в своем домашнем каталоге и подкаталогах, которые вы будете создавать для организации своих файлов.

Вы можете перейти в свой домашний каталог в любое время, используя следующую команду —

Здесь ~ указывает на домашний каталог. Предположим, вам нужно перейти в домашний каталог любого другого пользователя, используйте следующую команду —

Чтобы перейти в последний каталог, вы можете использовать следующую команду —

Абсолютные/относительные пути

Каталоги расположены в иерархии с корнем (/) вверху. Положение любого файла в иерархии определяется его путем.

Элементы пути разделяются знаком /. Путь является абсолютным, если он описан относительно корня, поэтому абсолютные пути всегда начинаются с /.

Ниже приведены некоторые примеры абсолютных имен файлов.

Путь также может относиться к вашему текущему рабочему каталогу. Относительные пути никогда не начинаются с /. Относительно домашнего каталога пользователя amrood некоторые пути могут выглядеть так —

Чтобы в любой момент определить, где вы находитесь в иерархии файловой системы, введите команду pwd для печати текущего рабочего каталога –

Список каталогов

Чтобы перечислить файлы в каталоге, вы можете использовать следующий синтаксис —

Ниже приведен пример списка всех файлов, содержащихся в каталоге /usr/local –

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

Теперь мы поймем, как создавать каталоги. Каталоги создаются следующей командой —

Здесь каталог — это абсолютный или относительный путь к каталогу, который вы хотите создать. Например, команда —

Создает каталог mydir в текущем каталоге. Вот еще один пример —

Эта команда создает каталог test-dir в каталоге /tmp. Команда mkdir ничего не выводит, если она успешно создает запрошенный каталог.

Если вы укажете в командной строке несколько каталогов, mkdir создаст каждый из них. Например, –

Создает каталоги docs и pub в текущем каталоге.

Создание родительских каталогов

Теперь мы поймем, как создавать родительские каталоги. Иногда, когда вы хотите создать каталог, его родительский каталог или каталоги могут не существовать. В этом случае mkdir выдает следующее сообщение об ошибке:

В таких случаях вы можете указать параметр -p для команды mkdir. Он создает все необходимые каталоги для вас. Например —

Приведенная выше команда создает все необходимые родительские каталоги.

Удаление каталогов

Каталоги можно удалить с помощью команды rmdir следующим образом:

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

Вы можете удалить несколько каталогов одновременно следующим образом:

Приведенная выше команда удаляет каталоги имя_каталога1, имя_каталога2 и имя_каталога3, если они пусты. Команда rmdir не выводит никаких результатов, если она выполнена успешно.

Изменение каталогов

Команду cd можно использовать не только для перехода в домашний каталог. Вы можете использовать его для перехода в любой каталог, указав допустимый абсолютный или относительный путь. Синтаксис приведен ниже —

Здесь dirname — это имя каталога, в который вы хотите перейти. Например, команда —

Изменения в каталоге /usr/local/bin. Из этого каталога вы можете перейти в каталог /usr/home/amrood, используя следующий относительный путь —

Переименование каталогов

Команду mv (переместить) также можно использовать для переименования каталога. Синтаксис следующий —

Вы можете переименовать каталог mydir в yourdir следующим образом:

Каталоги . (точка) и .. (точка точка)

Имя файла . (точка) представляет текущий рабочий каталог; а имя файла .. (точка) представляет каталог на один уровень выше текущего рабочего каталога, который часто называют родительским каталогом.

Если мы введем команду, чтобы отобразить список текущих рабочих каталогов/файлов, и воспользуемся параметром -a, чтобы вывести список всех файлов, и параметром -l, чтобы предоставить длинный список, мы получим следующий результат.

Боладжи Айодеджи

С момента создания Unix в 1970-х годах многие операционные системы использовали его в качестве основы. Многие из этих операционных систем потерпели неудачу, в то время как другие преуспели.

Linux — одна из самых популярных операционных систем на базе Unix. Это открытый исходный код, который используется по всему миру во многих отраслях.

Одной из замечательных особенностей операционной системы Linux является интерфейс командной строки (CLI), который позволяет пользователям взаимодействовать со своим компьютером из оболочки. Оболочка Linux представляет собой среду REPL (чтение, оценка, печать, цикл), в которой пользователи могут вводить команду, а оболочка запускает ее и возвращает результат.

Команда ls — это одна из многих команд Linux, которые позволяют пользователю просматривать файлы или каталоги из интерфейса командной строки.

В этой статье мы подробно рассмотрим команду ls и некоторые из наиболее важных флагов, которые вам понадобятся в повседневной жизни.

Предпосылки

  • Компьютер с каталогами и файлами
  • Установите один из дистрибутивов Linux
  • Базовые знания о навигации по интерфейсу командной строки.
  • Улыбка на вашем лице :)

Команда Linux ls

Команда ls используется для вывода списка файлов или каталогов в Linux и других операционных системах на базе Unix.

Точно так же, как вы перемещаетесь в своем Проводнике файлов или Finder с помощью графического интерфейса, команда ls по умолчанию позволяет вам вывести список всех файлов или каталогов в текущем каталоге, а также далее взаимодействовать с ними через командную строку.

Запустите терминал и введите ls, чтобы увидеть это в действии:

Как составить список файлов в каталоге с параметрами

Команда ls также принимает некоторые флаги (известные также как параметры), которые представляют собой дополнительную информацию, изменяющую способ отображения файлов или каталогов в вашем терминале.

Другими словами, флаги изменяют работу команды ls:

PS: слово «содержимое», используемое в статье, относится к перечисленным файлам и каталогам, а не к фактическому содержимому файлов/каталогов ?

Список файлов в текущем рабочем каталоге

Введите команду ls, чтобы просмотреть содержимое текущего рабочего каталога:

Список файлов в другом каталоге

Введите команду ls [здесь путь к каталогу], чтобы просмотреть содержимое другого каталога:

Список файлов в корневом каталоге

Введите команду ls /, чтобы просмотреть содержимое корневого каталога:

Список файлов в родительском каталоге

Введите команду ls .., чтобы отобразить содержимое родительского каталога на один уровень выше. Используйте ls ../.. для содержимого двумя уровнями выше:

Список файлов в домашнем каталоге пользователя (/home/user)

Введите команду ls ~, чтобы просмотреть содержимое домашнего каталога пользователя:

Список только каталогов

Введите команду ls -d */, чтобы вывести список только каталогов:

Список файлов с подкаталогами

Введите команду ls *, чтобы просмотреть содержимое каталога с его подкаталогами:

Рекурсивный список файлов

Введите команду ls -R, чтобы вывести список всех файлов и каталогов с соответствующими подкаталогами до последнего файла:

Если у вас много файлов, это может занять очень много времени, так как каждый отдельный файл в каждом каталоге будет распечатан. Вместо этого вы можете указать каталог для запуска этой команды, например: ls Downloads -R

Список файлов с их размерами

Введите команду ls -s (s в нижнем регистре), чтобы отобразить файлы или каталоги с их размерами:

Список файлов в длинном формате

Введите команду ls -l, чтобы просмотреть содержимое каталога в формате таблицы со столбцами, включая:

Список файлов в длинном формате с удобочитаемыми размерами файлов

Введите команду ls -lh, чтобы вывести список файлов или каталогов в том же формате таблицы, что и выше, но с другим столбцом, представляющим размер каждого файла/каталога:

Обратите внимание, что размеры указаны в байтах (Б), мегабайтах (МБ), гигабайтах (ГБ) или терабайтах (ТБ), если размер файла или каталога превышает 1024 байта.

Список файлов, включая скрытые файлы

Введите команду ls -a, чтобы вывести список файлов или каталогов, включая скрытые файлы или каталоги. В Linux все, что начинается с . считается скрытым файлом:

Список файлов в длинном формате, включая скрытые файлы

Введите команду ls -l -a или ls -a -l или ls -la или ls -al, чтобы вывести список файлов или каталогов в табличном формате с дополнительной информацией, включая скрытые файлы или каталоги:

Список файлов и сортировка по дате и времени

Введите команду ls -t, чтобы вывести список файлов или каталогов и отсортировать их по дате последнего изменения в порядке убывания (от большего к меньшему).

Вы также можете добавить флаг -r, чтобы изменить порядок сортировки, например: ls -tr :

Список файлов и сортировка по размеру файла

Введите команду ls -S (S в верхнем регистре), чтобы вывести список файлов или каталогов и отсортировать их по размеру в порядке убывания (от большего к меньшему).

Вы также можете добавить флаг -r, чтобы изменить порядок сортировки, например: ls -Sr :

Список файлов и вывод результата в файл

Введите команду ls > output.txt, чтобы напечатать вывод предыдущей команды в файл output.txt. Вы можете использовать любой из рассмотренных ранее флагов, например -la — ключевым моментом здесь является то, что результат будет выводиться в файл, а не заноситься в командную строку.

Затем вы можете использовать файл по своему усмотрению или записать содержимое файла с помощью cat output.txt :

.

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

Представьте, что вы хотите составить список файлов в длинном формате, включая скрытые файлы, и отсортировать их по размеру. Это будет команда ls -alS , представляющая собой комбинацию ls -l , ls -a и ls -S .

Если вы забыли какую-либо команду или не знаете, что делать, вы можете запустить ls --help или man ls, которые отобразят руководство со всеми возможными параметрами для команды ls:

Одна из проблем, с которой сталкиваются пользователи, впервые изучающие работу с Linux, – поиск нужных файлов.

В этом руководстве рассказывается, как использовать команду find с подходящим названием. Это поможет вам искать файлы в вашей системе, используя различные фильтры и параметры. Также будет кратко рассмотрена команда locate, которую можно использовать для поиска файлов другим способом.

Предпосылки

Чтобы следовать этому руководству, вам потребуется доступ к компьютеру с операционной системой на базе Linux. Это может быть либо виртуальный частный сервер, к которому вы подключились с помощью SSH, либо ваша локальная машина. Обратите внимание, что это руководство было проверено с использованием сервера Linux с Ubuntu 20.04, но приведенные примеры должны работать на компьютере с любой версией любого дистрибутива Linux.

Если вы планируете использовать удаленный сервер, чтобы следовать этому руководству, мы рекомендуем вам сначала выполнить наше руководство по начальной настройке сервера. Это создаст безопасную серверную среду, включая пользователя без полномочий root с привилегиями sudo и брандмауэр, настроенный с помощью UFW, которые вы сможете использовать для развития своих навыков работы с Linux.

Кроме того, вы можете использовать интерактивный терминал, встроенный в эту страницу, чтобы поэкспериментировать с примерами команд из этого руководства. Щелкните следующее Запустить интерактивный терминал! кнопку, чтобы открыть окно терминала и начать работу в среде Linux (Ubuntu).

Запустите интерактивный терминал!

Примечание. Чтобы проиллюстрировать, как работают команды find и locate, приведенные в этом руководстве примеры команд выполняют поиск файлов, хранящихся в папке / или в корневом каталоге. Из-за этого, если вы вошли в терминал как пользователь без полномочий root, некоторые из примеров команд могут содержать в своем выводе Отказ в доступе.

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

Поиск по имени

Самый очевидный способ поиска файлов — по имени.

Чтобы найти файл по имени с помощью команды find, используйте следующий синтаксис:

Это будет чувствительно к регистру, то есть поиск по запросу отличается от поиска по запросу .

Чтобы найти файл по имени, но игнорировать регистр запроса, используйте параметр -iname:

Если вы хотите найти все файлы, которые не соответствуют определенному шаблону, вы можете инвертировать поиск, указав -not :

Кроме того, вы можете инвертировать поиск, используя восклицательный знак ( ! ), например:

Обратите внимание, что если вы используете ! , вы должны экранировать символ обратной косой чертой ( \ ), чтобы оболочка не пыталась интерпретировать его до того, как find сможет действовать.

Поиск по типу

Вы можете указать тип файлов, которые хотите найти, с помощью параметра -type. Это работает следующим образом:

Вот некоторые дескрипторы, которые можно использовать для указания типа файла:

  • f : обычный файл
  • d : каталог
  • l : символическая ссылка
  • c : символьные устройства
  • b : заблокировать устройства

Например, если вы хотите найти все символьные устройства в вашей системе, вы можете ввести следующую команду:

Эта команда ищет только устройства в каталоге /dev, в котором обычно монтируются файлы устройств в системах Linux:

Вы можете найти все файлы, оканчивающиеся на .conf, с помощью следующей команды. В этом примере выполняется поиск соответствующих файлов в каталоге /usr:

Примечание. В предыдущем примере объединены два выражения запроса поиска; а именно, -type f и -name "*.conf" . Чтобы любой файл был возвращен, он должен удовлетворять обоим этим выражениям.

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

В этом примере будут найдены все файлы, имена которых соответствуют запросу query_1 или query_2 .

Фильтрация по времени и размеру

find предоставляет множество способов фильтрации результатов по размеру и времени.

Вы можете фильтровать файлы по их размеру, используя параметр -size. Для этого вы должны добавить специальный суффикс в конце числового значения размера, чтобы указать, рассчитываете ли вы размер в байтах, мегабайтах, гигабайтах или другом размере. Вот некоторые часто используемые суффиксы размера:

  • c : байты
  • k : килобайты
  • M : мегабайты
  • G : гигабайты
  • b : блоки по 512 байт.

Для иллюстрации следующая команда найдет все файлы в каталоге /usr размером ровно 50 байт:

Чтобы найти файлы размером менее 50 байт, можно использовать следующий синтаксис:

Чтобы найти в каталоге /usr файлы размером более 700 мегабайт, можно использовать следующую команду:

Для каждого файла в системе Linux хранит временные данные о времени доступа, времени модификации и времени изменения.

Время доступа: время последнего чтения или записи файла.

Время модификации: время последнего изменения содержимого файла.

Время изменения: время последнего изменения метаданных индексного дескриптора файла.

Вы можете основывать свои поисковые запросы на этих параметрах, используя параметры -atime , -mtime и -ctime соответственно. Для любого из этих параметров вы должны указать значение, указывающее, сколько дней в прошлом вы хотите выполнить поиск. Как и в случае с параметрами размера, описанными ранее, перед этими параметрами можно поставить символы плюс или минус, чтобы указать «больше» или «меньше».

Например, чтобы найти файлы в каталоге /usr, которые были изменены за последний день, выполните следующую команду:

Если вам нужны файлы, к которым обращались менее суток назад, вы можете запустить эту команду:

Чтобы найти файлы, метаинформация которых была изменена более 3 дней назад, можно выполнить следующее:

У этих параметров также есть сопутствующие параметры, которые можно использовать для указания минут вместо дней:

Это даст файлы, которые были изменены за последнюю минуту.

find также может выполнять сравнение с эталонным файлом и возвращать более новые файлы:

Этот синтаксис вернет все файлы в системе, которые были созданы или изменены позже эталонного файла.

Поиск по владельцу и разрешениям

Вы также можете искать файлы по пользователю или группе, которой принадлежит файл, используя параметры -user и -group соответственно. Чтобы найти все файлы в каталоге /var, принадлежащие пользователю syslog, выполните следующую команду:

Аналогичным образом вы можете указать файлы в каталоге /etc, принадлежащие теневой группе, набрав:

Вы также можете искать файлы с определенными разрешениями.

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

Это будет соответствовать файлам с точно указанными разрешениями.

Если вы хотите указать что-либо с хотя бы этими разрешениями, вы можете поставить перед обозначением разрешений знак минус:

Это будет соответствовать любым файлам, имеющим дополнительные разрешения. В этом случае будет найден файл с правами доступа 744.

Фильтрация по глубине

В этом разделе вы создадите примерную структуру каталогов, которую затем будете использовать для изучения фильтрации файлов по их глубине внутри структуры.

Если вы следуете примерам из этого руководства, было бы разумно создать эти файлы и каталоги в каталоге /tmp/. /tmp/ — это временный каталог, что означает, что любые файлы и каталоги в нем будут удалены при следующей загрузке сервера. Это будет полезно для целей данного руководства, поскольку вы можете создать столько каталогов, файлов и ссылок, сколько захотите, не беспокоясь о том, что они впоследствии засорят вашу систему.

После выполнения команд в этом разделе ваш каталог /tmp/ будет содержать три уровня каталогов с десятью каталогами на первом уровне. Каждый каталог (включая временный каталог) будет содержать десять файлов и десять подкаталогов.

Создайте примерную структуру каталогов в каталоге /tmp/ с помощью следующей команды:

После этого заполните эти каталоги несколькими образцами файлов с помощью команды touch:

Установив эти файлы и каталоги, перейдите в только что созданный каталог test/:

Чтобы получить общее представление о том, как find будет извлекать файлы из этой структуры, начните с обычного поиска по имени, который соответствует любому файлу с именем file1 :

Это вернет много результатов. Если вы направите вывод в счетчик, вы обнаружите, что всего 1111 результатов:

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

Чтобы найти файл1 только в каталогах уровня 1 и выше, вы можете указать максимальную глубину 2 (1 для каталога верхнего уровня и 1 для каталогов уровня 1):

Это гораздо более управляемый список.

Вы также можете указать минимальный каталог, если знаете, что все файлы существуют после определенного момента в текущем каталоге:

Вы можете использовать это, чтобы найти только файлы в конце ветвей каталога:

Опять же, из-за разветвленной структуры каталогов будет возвращено большое количество результатов (1000).

Вы можете комбинировать параметры минимальной и максимальной глубины, чтобы сфокусироваться на узком диапазоне:

Такое сочетание этих параметров значительно сужает результаты: возвращается только 110 строк вместо прежних 1 000.

Выполнение команд по результатам поиска

Вы можете выполнить произвольную вспомогательную команду для всего, что находит совпадения, используя параметр -exec, используя следующий синтаксис:

Кнопка <> используется в качестве заполнителя для файлов, которые находят совпадения. \; позволяет найти, где заканчивается команда.

Например, предположив, что вы все еще находитесь в каталоге test/, который вы создали в каталоге /tmp/ на предыдущем шаге, вы можете найти файлы в предыдущем разделе, у которых были разрешения 644, и изменить их, чтобы они имели разрешения 664:

Вы также можете изменить права доступа к каталогу аналогичным образом:

В этом примере выполняется поиск всех каталогов с разрешениями, установленными на 755, а затем изменяются разрешения на 700 .

Поиск файлов с помощью locate

Альтернативой использованию find является команда locate. Эта команда часто выполняется быстрее и может с легкостью выполнять поиск по всей файловой системе.

Вы можете установить эту команду в Debian или Ubuntu с помощью apt, обновив списки пакетов и затем установив пакет mlocate:

В Rocky Linux, CentOS и других дистрибутивах, производных от RedHat, вы можете вместо этого использовать команду dnf для установки mlocate:

Причина, по которой locate работает быстрее, чем find, заключается в том, что он опирается на базу данных, в которой перечислены все файлы в файловой системе. Эта база данных обычно обновляется один раз в день с помощью cron-скрипта, но вы можете обновить ее вручную с помощью команды updatedb. Запустите эту команду сейчас с привилегиями sudo:

Помните, что база данных локации всегда должна быть актуальной, если вы хотите найти новые файлы. Если вы добавите новые файлы до выполнения сценария cron или до запуска команды updatedb, они не будут отображаться в результатах вашего запроса.

locate позволяет фильтровать результаты несколькими способами. Самый простой способ использовать его для поиска файлов — использовать следующий синтаксис:

Это будет соответствовать любым файлам и каталогам, которые содержат строковый запрос в любом месте их пути к файлу. Чтобы возвращать только файлы, имена которых содержат сам запрос, вместо каждого файла, содержащего запрос в каталогах, ведущих к нему, вы можете включить флаг -b для поиска только тех файлов, чье «базовое имя» соответствует запросу:

Чтобы функция locate возвращала только те результаты, которые все еще существуют в файловой системе (имеются в виду файлы, которые не были удалены между последним вызовом updateb и текущим вызовом locate), используйте флаг -e:

Вы можете получить статистику по каталогизированной информации locate с помощью параметра -S:

Это может быть полезно для получения общего представления о том, сколько файлов и каталогов существует в вашей системе.

Заключение

Команды find и locate являются полезными инструментами для поиска файлов в вашей системе. Обе являются мощными командами, которые можно усилить, комбинируя их с другими утилитами через конвейеры, но вам решать, какой инструмент подходит для вашей конкретной ситуации.

С этого момента мы рекомендуем вам продолжать экспериментировать с поиском и размещением . Вы можете прочитать их соответствующие справочные страницы, чтобы узнать о других параметрах, не описанных в этом руководстве, и вы можете анализировать результаты поиска и управлять ими, перенаправляя их в другие команды, такие как wc , sort и grep .

Хотите узнать больше? Присоединяйтесь к сообществу DigitalOcean!

Присоединяйтесь к нашему сообществу DigitalOcean, насчитывающему более миллиона разработчиков, бесплатно!Получайте помощь и делитесь знаниями в нашем разделе "Вопросы и ответы", находите руководства и инструменты, которые помогут вам расти как разработчику и масштабировать свой проект или бизнес, а также подписывайтесь на интересующие вас темы.

Фраза "итерировать дерево каталогов" означает доступ к каждому файлу в каждом вложенном подкаталоге в указанной корневой папке на любой глубине. Вам не обязательно открывать каждый файл. Вы можете просто получить имя файла или подкаталога в виде строки или получить дополнительную информацию в виде объекта System.IO.FileInfo или System.IO.DirectoryInfo.

В Windows термины "каталог" и "папка" взаимозаменяемы. В большинстве текстов документации и пользовательского интерфейса используется термин "папка", но в библиотеках классов .NET используется термин "каталог".

В простейшем случае, когда вы точно знаете, что у вас есть права доступа ко всем каталогам в указанном корне, вы можете использовать флаг System.IO.SearchOption.AllDirectories. Этот флаг возвращает все вложенные подкаталоги, соответствующие указанному шаблону. В следующем примере показано, как использовать этот флаг.

Слабость этого подхода заключается в том, что если какой-либо из подкаталогов в указанном корне вызывает исключение DirectoryNotFoundException или UnauthorizedAccessException, весь метод завершается с ошибкой и не возвращает никаких каталогов. То же самое верно и при использовании метода GetFiles. Если вам нужно обработать эти исключения в определенных подпапках, вы должны вручную пройтись по дереву каталогов, как показано в следующих примерах.

При обходе дерева каталогов вручную вы можете сначала обрабатывать файлы (обход в предварительном порядке) или сначала подкаталоги (обход в обратном порядке). Если вы выполняете предварительный обход, вы посещаете файлы непосредственно в этой папке, а затем проходите все дерево в текущей папке. Обход по порядку - это наоборот, обход всего дерева ниже, прежде чем добраться до файлов текущей папки. Примеры, приведенные далее в этом документе, выполняют обход в предварительном порядке, но вы можете легко изменить их для выполнения обхода в последующем.

Еще один вариант — использовать рекурсию или обход на основе стека. В приведенных ниже примерах в этом документе показаны оба подхода.

Если вам нужно выполнять различные операции с файлами и папками, вы можете разделить эти примеры на модули, рефакторинг операции в отдельные функции, которые вы можете вызывать с помощью одного делегата.

Примеры

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

Конкретные обрабатываемые исключения и конкретные действия, выполняемые с каждым файлом или папкой, приведены только в качестве примеров. Вы должны изменить этот код, чтобы он соответствовал вашим конкретным требованиям. Дополнительные сведения см. в комментариях к коду.

В следующем примере показано, как перебирать файлы и папки в дереве каталогов без использования рекурсии. В этом методе используется универсальный тип коллекции Stack, который представляет собой стек «последний пришел — первый ушел» (LIFO).

Конкретные обрабатываемые исключения и конкретные действия, выполняемые с каждым файлом или папкой, приведены только в качестве примеров. Вы должны изменить этот код, чтобы он соответствовал вашим конкретным требованиям. Дополнительные сведения см. в комментариях к коду.

Проверка каждой папки, чтобы определить, есть ли у вашего приложения разрешение на ее открытие, обычно занимает слишком много времени. Поэтому пример кода просто заключает эту часть операции в блок try/catch. Вы можете изменить блок catch, чтобы, когда вам отказывают в доступе к папке, вы пытались повысить свои разрешения, а затем снова получить к ней доступ. Как правило, перехватывайте только те исключения, которые вы можете обработать, не оставляя приложение в неизвестном состоянии.

Если вам необходимо сохранить содержимое дерева каталогов в памяти или на диске, лучше всего хранить только свойство FullName (типа string ) для каждого файла. Затем вы можете использовать эту строку для создания нового объекта FileInfo или DirectoryInfo по мере необходимости или открыть любой файл, требующий дополнительной обработки.

Надежное программирование

Надежный код итерации файла должен учитывать многие сложности файловой системы. Дополнительные сведения о файловой системе Windows см. в разделе Обзор NTFS.

Читайте также: