Найти глубину каталога | |
---|---|
tmp_adr Автор Сообщений: 185 Дата регистрации: 29.10.2007 |
Здравствуйте, если дан каталог, в нём находятся подкаталоги и т.д., как можно найти максимальное количество подкаталогов в этой папке, не учитывая скрытые и системные папки. Конечно можно батовским файлом поискать командой dir /b /s /a:d-s-h с последующей сортировкой, но эта команда исключает скрытые каталоги, только на первом уровне, а дальше в список включаются скрытые и системные каталоги. Фокс игнорирует скрытые и системные, но вот как глубоко он может зайти и как найти максимальную глубину этого каталога. т.е. в итоге должно получиться , "больше всего каталогов 20 находится по пути c:\user\Иванов\Рабочий стол\и т.д."
|
Re: Найти глубину каталога | |
---|---|
AndyNigmatec Сообщений: 1574 Откуда: Волгоград Дата регистрации: 28.06.2015 |
рекурсивная функция с ADIR() внутрях - и сколь угодно глЫбоко можно копать ))
|
Re: Найти глубину каталога | |
---|---|
PaulWist Сообщений: 14625 Дата регистрации: 01.04.2004 |
forum.foxclub.ru
forum.foxclub.ru ------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) |
Re: Найти глубину каталога | |
---|---|
akvvohinc Сообщений: 4224 Откуда: Москва Дата регистрации: 11.11.2008 |
Неужели "сколь угодно"? А как скоро вы получите Allowed DO nesting or expression evaluation level exceeded. ? Не нужна для решения задачи никакая рекурсия - достаточно одного простого цикла по списку папок, в котором изначально находится только один элемент - корневая папка. Двигаясь по этому списку папок сверху вниз, сканируем содержимое текущей папки, дописывая в конец списка имена встретившихся подпапок. И когда этот список будет пройден до конца, это и будет означать, что всё дерево папок пройдено. Пример начальных шагов: Папка1 (корневая папка) __Папка1-1 (1-я подпапка в Папке1) __Папка1-2 (2-я подпапка в Папке1) ____Папка1-1-1 (1-я подпапка в Папке1-1) [не имеет подпапок] ____Папка1-2-1 (1-я подпапка в Папке1-2) [не имеет подпапок] ____Папка1-2-2 ____Папка1-2-3 ______Папка1-2-2-1 и т.д. Отступы условно показывают уровень вложенности. Список, на мой взгляд, наиболее удобно делать на основе курсора, поместив в него изначально одну запись - для корневой папки. Тогда цикл представляет собой обычный SCAN этого курсора. |
Re: Найти глубину каталога | |
---|---|
leonid Сообщений: 3204 Откуда: Рига Дата регистрации: 03.02.2006 |
Ну так это зависит от настроек. Думаю, 64000 для решения данной задачи вполне хватит. |
Re: Найти глубину каталога | |
---|---|
akvvohinc Сообщений: 4224 Откуда: Москва Дата регистрации: 11.11.2008 |
Вы о STACKSIZE? Я не знаю, сколько хватит именно ТС. Но шансы получить переполнение стека (Insufficient stack space) велики. А главное, заранее не знаешь, где, когда и почему рванёт. Сейчас проверил - у меня "пустая" рекурсия в отдельном PRG при максимальном стеке свалилась на 743, 910 и ещё раз на 910-м уровне на трех разных компах (Win10, 7 и XP), причем, на Win10 (где 743) я получил Fatal Error 308 и пустое Фокс-окошко вместо Insufficient stack space. Проводить исследования, от каких характеристик/настроек компа, Фокса и/или запущенных программ это зависит? - не мой путь - не верю, что он может что-либо более-менее гарантировать в общем случае. Не знаю, кому как, но у меня ещё со времен ДОСа сложилось стойкое неприятие к рекурсии в Фоксе - хотя раньше в основном из-за слишком малого допустимого уровня вложенности программ. Так что в любом случае, если можно обойтись без неё и одновременно танцев с бубнами, я рекурсией пользоваться не буду - это красиво только в теории. |
Re: Найти глубину каталога | |
---|---|
leonid Сообщений: 3204 Откуда: Рига Дата регистрации: 03.02.2006 |
Сейчас конечно не вспомню конкретно, но помнится, встречались задачи, которые рекурсией решались на порядок-другой проще, чем без нее. |
Re: Найти глубину каталога | |
---|---|
akvvohinc Сообщений: 4224 Откуда: Москва Дата регистрации: 11.11.2008 |
Согласен, наверняка такие могут быть - тогда другое дело (если программа ещё и не валится время от времени). Но это я и назвал выше "и без танцев с бубнами", а в данной теме как раз они и не требуются при отказе от рекурсии - алгоритм простой и прозрачный (и проверенный на практике еще со времен ДОСа. ) Исправлено 1 раз(а). Последнее : akvvohinc, 08.06.23 00:46 |
Re: Найти глубину каталога | |
---|---|
tmp_adr Автор Сообщений: 185 Дата регистрации: 29.10.2007 |
Спасибо за ответы, вроде бы так примерно powershell "ls -Path с:\Users\Иванов\ -Directory -Recurse >111.txt выдаёт список без скрытых каталогов на всём протяжении, в отличии от dir, а далее парсить текстовик и подсчитывать слеши
Исправлено 1 раз(а). Последнее : tmp_adr, 08.06.23 08:18 |
Re: Найти глубину каталога | |
---|---|
AndyNigmatec Сообщений: 1574 Откуда: Волгоград Дата регистрации: 28.06.2015 |
Хотя задача ТС и решена, но данный способ (ADIR()+рекурсия) я давно использую для построения структуры каталогов (и перчня файлов) ... конечно уровня вложенности даже 100 никогда не достигал ... ну не встречалось столь глЫбоко закопанных файлов. Собсно никто не мешает програмно ограничить рекурсию той же сотней к примеру... сейчас глянул - у меня в классе так и сделано ))
Ну собсно сам класс приложил, вдруг кому-нить пригодится. использование (пример), результат выводится в указанный курсор (в примере - cDirTest):
|
Re: Найти глубину каталога | |
---|---|
tmp_adr Автор Сообщений: 185 Дата регистрации: 29.10.2007 |
Спасибо
|
Re: Найти глубину каталога | |
---|---|
akvvohinc Сообщений: 4224 Откуда: Москва Дата регистрации: 11.11.2008 |
Парсить текстовик? Powershell способен экспортировать данные в CSV и XML. Почитайте также про файлы форматирования. |
© 2000-2024 Fox Club  |