С Новым годом! Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.68/50: Рейтинг темы: голосов - 50, средняя оценка - 4.68
 Аватар для Microo10
45 / 20 / 4
Регистрация: 18.08.2011
Сообщений: 395

Рекурсивный обход дерева папок

17.01.2013, 12:58. Показов 10616. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот код рекурсивного обхода всех папок в директории :
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
procedure FindFiles(const DirPath: string; Str: TStrings);
var
SR: TSearchRec;
begin
if FindFirst(DirPath + '\*.ts', faAnyFile, SR) = 0 then
try
repeat
if not ((SR.Name = '.') or (SR.Name = '..')) then
begin
if SR.Attr = faDirectory then
FindFiles(DirPath + '\' + SR.Name, Str)
else
Str.Add(SR.Name);
end;
until FindNext(SR) <> 0;
finally
FindClose(SR);
end;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
FindFiles('C:\test', Memo1.Lines);
end;
Данный код ишет файлы (*.ts) во всех папках 'C:\test' ...
Подскажите как в
Code
1
if FindFirst(DirPath + '\*.ts', faAnyFile, SR) = 0 then
вместо *.ts поместить переменную?
Заранее спасибо.

Добавлено через 5 минут
P.s переменных должно быть две : НазваниеФайла.Расширение
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.01.2013, 12:58
Ответы с готовыми решениями:

Нерекурсивный обход дерева
InOrder и PostOrded рекурсивно - это легко. А как сделать нерекурсивно такие обходы? Все еще не понимаю

Рекурсивный обход дерева папок и файлов - избавиться от бесконечного цикла
Добрый день! Стоит задача рекурсивно обойти и сохранить имена папок и файлов в виде вектора. Моя рекурсивная функция работает не...

Рекурсивный обход дерева
Добрый вечер! Не получается доделать рекурсивный обход дерева.(PHP недавно начал осваивать...) Не могу понять как вывести на экран НЕ...

21
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
17.01.2013, 13:17
Code
1
if FindFirst(DirPath + '\' + НазваниеФайла + '.' + Расширение, faAnyFile, SR) = 0 then
1
 Аватар для Microo10
45 / 20 / 4
Регистрация: 18.08.2011
Сообщений: 395
17.01.2013, 13:28  [ТС]
Цитата Сообщение от mss Посмотреть сообщение
Code
1
if FindFirst(DirPath + '\' + НазваниеФайла + '.' + Расширение, faAnyFile, SR) = 0 then
блин я то же самое писал,он ругался...а щяс все норм

Добавлено через 7 минут
Спасибо,а можно как нибудь переменные встроить в процедуру? У меня именно это не получилось,просто у меня много масок и они будут по очереди добавляться в процедуру...вот так:
Code
1
FindFiles('C:\A' ,'mask1','mask2', Memo1.Lines);
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
17.01.2013, 13:35
Code
1
FindFiles('C:\A' , Переменная_mask1, Переменная_mask2, Memo1.Lines);
0
 Аватар для Microo10
45 / 20 / 4
Регистрация: 18.08.2011
Сообщений: 395
17.01.2013, 13:39  [ТС]
Цитата Сообщение от mss Посмотреть сообщение
Code
1
FindFiles('C:\A' , Переменная_mask1, Переменная_mask2, Memo1.Lines);
ты издеваешься? Эта строчка просто сообщает данные,а процедура их явно не будет воспринимать.
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
17.01.2013, 13:51
Цитата Сообщение от Microo10 Посмотреть сообщение
а процедура их явно не будет воспринимать
А самостоятельно добавить пару формальных параметров в объявление и реализацию процедуры FindFiles религия не позволяет ?
0
 Аватар для Microo10
45 / 20 / 4
Регистрация: 18.08.2011
Сообщений: 395
17.01.2013, 13:59  [ТС]
Цитата Сообщение от mss Посмотреть сообщение
А самостоятельно добавить пару формальных параметров в объявление и реализацию процедуры FindFiles религия не позволяет ?
Я для этого на форум и обратился,не получается.
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
17.01.2013, 14:23
Цитата Сообщение от Microo10 Посмотреть сообщение
не получается
Интересно, как же у тебя получалось до этого ?

В текущем варианте, т.е.
Code
1
procedure FindFiles(const DirPath: string; Str: TStrings);
ты же как-то додумался объявить два формальных параметра)
А объявить плюс к существующим еще два дополнительных - это уже полный ступор ?
0
 Аватар для Microo10
45 / 20 / 4
Регистрация: 18.08.2011
Сообщений: 395
17.01.2013, 14:27  [ТС]
Цитата Сообщение от mss Посмотреть сообщение
Интересно, как же у тебя получалось до этого ?

В текущем варианте, т.е.
Code
1
procedure FindFiles(const DirPath: string; Str: TStrings);
ты же как-то додумался объявить два формальных параметра)
А объявить плюс к существующим еще два дополнительных - это уже полный ступор ?
Объявлял я,но там компилятор ругался,код процедуры не мой,я с рекурсивным обходом работаю впервые.
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
17.01.2013, 14:31
Цитата Сообщение от Microo10 Посмотреть сообщение
с рекурсивным обходом работаю впервые
А причем здесь "рекурсивный обход" ?
Можно подумать, что если процедура бы делала что-то иное и нерекурсивно, то проблем с добавлением в нее формального параметра у тебя бы не было ..
0
 Аватар для Microo10
45 / 20 / 4
Регистрация: 18.08.2011
Сообщений: 395
17.01.2013, 14:34  [ТС]
Цитата Сообщение от mss Посмотреть сообщение
А причем здесь "рекурсивный обход" ?
Можно подумать, что если процедура бы делала что-то иное и нерекурсивно, то проблем с добавлением в нее формального параметра у тебя бы не было ..
Да блин,после того как я формальные переменные добавил в процедуру,компилятор начал ругаться на строку
Delphi
1
FindFiles(DirPath + '\' + SR.Name, Str)

Не по теме:

И прекратите бессмысленный флуд в теме.

0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
17.01.2013, 14:40
Цитата Сообщение от Microo10 Посмотреть сообщение
после того как я формальные переменные добавил в процедуру
Я не вижу что ты их добавил.
Так что вперед - добавляй и показывай что тобой лично сделано, потом будешь рассуждать про "ругается" и про "флуд".
0
 Аватар для Microo10
45 / 20 / 4
Регистрация: 18.08.2011
Сообщений: 395
17.01.2013, 14:56  [ТС]
Цитата Сообщение от mss Посмотреть сообщение
Я не вижу что ты их добавил.
Так что вперед - добавляй и показывай что тобой лично сделано, потом будешь рассуждать про "ругается" и про "флуд".
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
procedure FindFiles(const DirPath: string; mask1,mask2:string; Str: TStrings);
var
SR: TSearchRec;
begin
if FindFirst(DirPath + '\' + mask1 + '.' + mask2, faAnyFile, SR) = 0 then
try
repeat
if not ((SR.Name = '.') or (SR.Name = '..')) then
begin
if SR.Attr = faDirectory then
FindFiles(DirPath + '\' + SR.Name, Str)
else
Str.Add(SR.Name);
end;
until FindNext(SR) <> 0;
finally
FindClose(SR);
end;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
 FindFiles('C:\A','test','txt' , Memo1.Lines);
end;
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
17.01.2013, 15:04
Чудесно, лед тронулся.
Едем дальше:
Цитата Сообщение от Microo10 Посмотреть сообщение
FindFiles(DirPath + '\' + SR.Name, Str)
А во вложенном вызове, где у тебя изменения с учетом #2 ?
0
 Аватар для Microo10
45 / 20 / 4
Регистрация: 18.08.2011
Сообщений: 395
17.01.2013, 15:13  [ТС]
mss, ты можешь понятнее говорить?

Добавлено через 5 минут
P.S Если я обращаюсь на форум,то мне нужен внятный ответ,где ошибка,как исправить и т.д . Мне не нужны подробные объяснения. Нужна реализация рекурсивного обхода папок директории,срочно.
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
17.01.2013, 15:14
Цитата Сообщение от mss Посмотреть сообщение
FindFiles(DirPath + '\' + SR.Name, Str)
Измени список и значения фактических параметров этого вложенного вызова так, чтобы они учитывали и использовали два дополнительно объявленных тобой формальных параметров.

Что я сказал непонятного ?

Добавлено через 1 минуту
Цитата Сообщение от Microo10 Посмотреть сообщение
срочно
Срочно - это тебе во Фриланс.
А здесь изволь думать.
0
 Аватар для Microo10
45 / 20 / 4
Регистрация: 18.08.2011
Сообщений: 395
17.01.2013, 15:29  [ТС]
Цитата Сообщение от mss Посмотреть сообщение
Измени список и значения фактических параметров этого вложенного вызова так, чтобы они учитывали и использовали два дополнительно объявленных тобой формальных параметров.

Что я сказал непонятного ?
О да,а как это решит проблему несовместимости типов?
Delphi
1
Incompatible types: 'string' and 'TStrings'
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
17.01.2013, 15:30
Цитата Сообщение от Microo10 Посмотреть сообщение
как это решит проблему несовместимости типов?
Нет никакой "проблемы несовместимости типов", если думать.
0
 Аватар для Microo10
45 / 20 / 4
Регистрация: 18.08.2011
Сообщений: 395
17.01.2013, 15:33  [ТС]
Цитата Сообщение от mss Посмотреть сообщение
Нет никакой "проблемы несовместимости типов", если думать.
Гуляй лесом,от вас проку нет.
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
17.01.2013, 15:36
Какой тебе "прок", мальчик, если ты мозг не можешь включить ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.01.2013, 15:36
Помогаю со студенческими работами здесь

Рекурсивный обход дерева
Помогите пожалуйста решить задачу, про методы расширения прочитал..Тут нужно использовать свойство Depht или как? Дан код: public...

Рекурсивный обход папок в поисках папки
Есть папка в ней много папок разной степени вложенности, в конечных папках есть папки &quot;AAA&quot; в которых лежат файлы. Надо...

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

Рекурсивный обход НЕбинарного дерева
Имеется функция, которая рекурсивно обходит одну папку. void GetFileList(LPTSTR sPath, Object* fsParser) { WIN32_FIND_DATA...

Инфиксный рекурсивный обход дерева
Задача написать инфиксный рекурсивный обход BST-дерева. Возвращает IEnumerable&lt;int&gt;. Написала процедуру, выводит вершину без детей 3...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru