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

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

17.01.2013, 12:58. Показов 10720. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru