Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
16 / 18 / 11
Регистрация: 07.03.2016
Сообщений: 362
1

Дерево каталогов

10.07.2017, 17:03. Показов 1890. Ответов 11

Author24 — интернет-сервис помощи студентам
Из данной директории нужно сходить во все дочерние директории и в каждой из них выполнить действие. Как это сделать?

Добавлено через 28 минут
Всем спасибо, я уже нашел решение. Оно таково:
Pascal
1
2
3
4
5
6
7
8
9
uses System.IO;
begin
  var dir := new DirectoryInfo('C:\Адрес данной директории');
  var res := dir.GetDirectories;
  for i: integer := 0 to length(res) - 1 do
  begin
    //res[i] - папка в данной
  end;
end.
А если все это сделать рекурсивно, то получится дерево каталогов
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.07.2017, 17:03
Ответы с готовыми решениями:

Удалить дерево каталогов и все что в них лежит, если таких каталогов нет во втором
Помогите пожалуйста решить такую задачу. Указываем два каталога. Если в первом каталоге во всем...

дерево каталогов
Всем привет!!У меня такая проблема))Не могу понять почему у меня ничего не выводит в компоненту...

Дерево каталогов
помогите разработать программу , которая выводит дерево каталогов (с нужным количеством отступов,...

дерево каталогов
function dirs($dir, $tab) { $d = opendir($dir); // . - current directory; while ($name...

11
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32836 / 21173 / 8148
Регистрация: 22.10.2011
Сообщений: 36,433
Записей в блоге: 8
10.07.2017, 17:18 2
Цитата Сообщение от kolay_ne Посмотреть сообщение
А если все это сделать рекурсивно, то получится дерево каталогов
А если сделать вот так:
Pascal
1
2
3
  var dir := new DirectoryInfo('C:\путь');
  var res := dir.GetDirectories('*.*', SearchOption.AllDirectories);
  for i: integer := 0 to length(res) - 1 do //
, то на фиг рекурсия не нужна.
1
16 / 18 / 11
Регистрация: 07.03.2016
Сообщений: 362
11.07.2017, 16:09  [ТС] 3
volvo, А вот и нужна. Он выдает мне имена папок, но как же я узнаю, какая внутри какой? Он выдает только имена, а не пути. Как ходить во вложенные директории?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32836 / 21173 / 8148
Регистрация: 22.10.2011
Сообщений: 36,433
Записей в блоге: 8
11.07.2017, 16:15 4
Лучший ответ Сообщение было отмечено kolay_ne как решение

Решение

Цитата Сообщение от kolay_ne Посмотреть сообщение
Он выдает только имена, а не пути
Да ладно?
res[i].FullName тебе даст полные пути. И не надо никуда ходить, чего ты упертый такой (Python-а объелся, что-ли? Так не надо было к сахару привыкать, от него диабет развивается. Это смертельная болезнь, если что...)? С этим флагом тебе уже будут выданы все вложенные директории:

Дерево каталогов


Куда еще тебе надо ходить?
0
16 / 18 / 11
Регистрация: 07.03.2016
Сообщений: 362
11.07.2017, 16:27  [ТС] 5
volvo, А вот и нужна. Он выдает мне имена папок, но как же я узнаю, какая внутри какой? Он выдает только имена, а не пути. Как ходить во вложенные директории?
Цитата Сообщение от volvo Посмотреть сообщение
уже будут выданы все вложенные директории:
Куда еще тебе надо ходить?
Как это куда? Мне нужно не получить список директорий, а сходить в них. Я в условии все написал.
Цитата Сообщение от volvo Посмотреть сообщение
чего ты упертый такой
Так жизнь сложилась
Цитата Сообщение от volvo Посмотреть сообщение
Python-а объелся, что-ли?
Есть такое ощущение

Добавлено через 43 секунды
А вообще - спасибо, то, что надо
0
5079 / 2651 / 2349
Регистрация: 10.12.2014
Сообщений: 10,028
12.07.2017, 08:40 6
Да, уж…
kolay_ne, рекурсия сдохнет, если наткнётся на зацикленные символические или жёсткие ссылки!

К примеру:

У вас системном диске компьютера (если ОС — винда и ещё в добавок свежая ;–) есть папка „Users“ и скрытая „Documents and Settings“ (которая ни что иное, как ссылка на первую).

В них имеется папочка „All Users“ (она скрытая, если что ;-), которая ссылается на „C:\ProgramData“.

Так вот, в ней, этой самой папке имеется рекурсивная „Application Data“.

Если вы будете пытаться всё время зайти в эту „Application Data“, то будете всегда попадать в неё же, только уровень вложенности будет всё время расти!

„C:\Users\All Users\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\…“
0
16 / 18 / 11
Регистрация: 07.03.2016
Сообщений: 362
12.07.2017, 15:50  [ТС] 7
JuriiMW, Разве существует ярлык на самого себя? Не знал... Проблема вот в чем, я в каждой из папок запускаю copy *.mp3 Так вот без рекурсии он скопировал на 5 файлов меньше, чем с рекурсией. Файлы исчисляются тысячей-другой, но что-то не так - факт... Поэтому я использую рекурсию и не лазаю в ApplicationData ;-)
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32836 / 21173 / 8148
Регистрация: 22.10.2011
Сообщений: 36,433
Записей в блоге: 8
12.07.2017, 17:48 8
Лучший ответ Сообщение было отмечено kolay_ne как решение

Решение

Так бы и говорил сразу. Ищи во всех вложенных папках файлы по нужной маске:
Pascal
1
  var res := dir.GetFiles('*.mp3', SearchOption.AllDirectories);
и с каждым из них делай то, что нужно (поскольку что нужно - ты опять не сказал, то я ничего и показывать не стал)

Цитата Сообщение от kolay_ne Посмотреть сообщение
Так вот без рекурсии он скопировал на 5 файлов меньше, чем с рекурсией
Фантастика - в следующем зале. Так не бывает. Если бы рекурсия была написана правильно - то она нашла бы ровно столько файлов, сколько найдет вышеприведенный код. Значит, рекурсия делает что-то лишнее, либо ты в своей реализации без рекурсии что-то недоделываешь. Опять же, нет полного кода - говорить не о чем.
0
16 / 18 / 11
Регистрация: 07.03.2016
Сообщений: 362
12.07.2017, 20:15  [ТС] 9
Цитата Сообщение от volvo Посмотреть сообщение
либо ты в своей реализации без рекурсии что-то недоделываешь
Похоже на правду, хотя это странно - его ведь проще написать, чем рекурсию... Такая элементарная - всего пара строчек... Но последний вариант выдал столько же вариантов, сколько рекурсия...
Цитата Сообщение от volvo Посмотреть сообщение
ты опять не сказал
А вот и неправда, сказал:
Цитата Сообщение от kolay_ne Посмотреть сообщение
я в каждой из папок запускаю copy *.mp3
, то бишь копирую файлы из этих папок.
Цитата Сообщение от volvo Посмотреть сообщение
Опять же, нет полного кода - говорить не о чем
Код вряд ли что даст, но, наверное, если я добавлю подробностей, вы подскажете мне еще что-нибудь полезное. Я прохожу по всем папочкам и копирую из всех mp3-файлы в другую папку на этом диске. Делаю я это, запуская командную строку с параметром /C. Я знаю, что в паскале есть какая-то встроенная штука, вроде &File.Copy что-то там. Если подскажете команду, буду благодарен. Если не подскажете, другой вопрос: когда у меня открывается пара тысяч командных строк, каждая из которых, не пытаясь оставить хоть капельку ЦП, копирует файлик. И это сильно отражается на работоспособности ноутбука, учитывая особенно то, что мой ноут сейчас мертв и я пользуюсь чужим слабеньким, хотя, я почти уверен, что мой ноут тоже не справился бы с этим. Итак, вопрос: как запускать копирования одно за другим, а не одновременно?
JuriiMW, Путь C:\Users\All Users перебрасывает в C:\ProgramData, C:\ProgramData\Application Data не существует, если набрать сразу C:\Users\All Users\Application Data - Отказано в доступе. Это все Win10
0
5079 / 2651 / 2349
Регистрация: 10.12.2014
Сообщений: 10,028
13.07.2017, 06:20 10
Цитата Сообщение от kolay_ne Посмотреть сообщение
Отказано в доступе
Значит не хватает прав — а это уже не паскаль… Да и я, к примеру, не пользуюсь виндовым проводником.
0
16 / 18 / 11
Регистрация: 07.03.2016
Сообщений: 362
13.07.2017, 07:38  [ТС] 11
Цитата Сообщение от JuriiMW Посмотреть сообщение
Значит не хватает прав
Блин, не хватает прав, потому что я пытаюсь получить доступ дальше ярлыка! AppData - не ярлык на сам себя, он ведев в ProgramData

Не по теме:

Цитата Сообщение от JuriiMW Посмотреть сообщение
не пользуюсь виндовым проводником
О, это может быть полезно... А чем вы пользуетесь? Мне бы пригодилось...

0
16 / 18 / 11
Регистрация: 07.03.2016
Сообщений: 362
13.07.2017, 08:11  [ТС] 12
JuriiMW, Если вы про это, то командная строка склонна создавать бесконечные пути. Вернее, наверное, правильней сказать, что это проводник склонен их укорачивать. В линуксовском терминале - то же самое, переход по ярлыку не меняет путь на место хранения ярлыка

К стати, все переходы в cmd сделаны без прав админа, но при запуске explorer-а в этой папке - отказано в доступе.
Но в том, что рекурсия повесится в этом месте, вы оказались правы: на var res := dir.GetDirectories - отказано в доступе (dir - C:\Users\All Users\Application Data)
Миниатюры
Дерево каталогов  
0
13.07.2017, 08:11
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.07.2017, 08:11
Помогаю со студенческими работами здесь

Дерево каталогов
Нужно в Делфи создать дерево каталогов(т.е. чтобы была возможность создавать папки) и чтобы оно...

Дерево каталогов
Помогите решить задачу с деревом каталогов.Условие на картинке.Зараннее благодарен.

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

Дерево каталогов
Добрый день) Необходимо на сайте организовать просмотр файлов и папок , каким элементом лучше...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru