Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.08.2009, 13:11   #11
---FISHER---
Пользователь
 
Аватар для ---FISHER---
 
Регистрация: 08.08.2009
Сообщений: 68
По умолчанию Вот что конкретно до меня не доходит:

Цитата:
Ищем любой файл/папку в папке заданной переменной в Dir
FindRes:=FindFirst(Dir+'*.*',faAnyF ile,SR);
если хоть один объект файловой системы нашёлся, то
проверим - если это директория и её имя точка или двоеточие - то ничего не делаем
(что такое точка или двоеточие, и соответственно почему мы ничего не делаем)
Цитата:
(переходим на поиск следующего элемента файловой системы)
Если это директория, тогда вызываем этот же алгорим поиска файлов в обнаруженной папке
(ЭТО И ЕСТЬ РЕКУРСИЯ - вызов процедуры из самой процедуры) - считайте, что просто вызвали свою процедуру,
только не в исходной директории Dir - а в найденной директории
(имя этой директории будет Dir + Sr.Name + '\' )...
Если же это не папка - то это файл. Его имя просто помещаем в список.
Полный путь к найденному файлу = Dir + Sr.Name
(Ну вот например нашли мы дерикторию, рекурсивно её просканировали, а если в ней ещё одна? а в ней ещё 50, я непонимаю как процедура потом возвратится например в предыдущую...или после 41 папки в 40...)
Цитата:
цикл повторяем, пока находятся объекты. Как только все объекты закончатся - мы выходим из процедуры.
Самое дорогое, что у нас есть - это время...
---FISHER--- вне форума Ответить с цитированием
Старый 16.08.2009, 13:26   #12
zotox
Форумчанин
 
Регистрация: 09.09.2008
Сообщений: 395
По умолчанию

Цитата:
Сообщение от ---FISHER--- Посмотреть сообщение
(что такое точка или двоеточие, и соответственно почему мы ничего не делаем)
Точка - Метка перехода в каталог откуда программа вызывалась

Двое точие - Метка перехода на каталог выше

К примеру, C:\1\..\nash.exe получится как -> C:\nash.exe (хотя эти точки роли в поиске/выводе файлов не играют мне кажится)

Последний раз редактировалось zotox; 16.08.2009 в 13:28.
zotox вне форума Ответить с цитированием
Старый 16.08.2009, 13:44   #13
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Ну вот например нашли мы дерикторию, рекурсивно её просканировали, а если в ней ещё одна?
или вы не понимаете что такое рекурсия либо пишите бред(пардон за прямоту)
рекурсия - это когда под-программа запускает (при опред условиях например) сама себя но уже с другими параметрами
рекурсия тут и помогает обследовать под-папки

Цитата:
я непонимаю как процедура потом возвратится например в предыдущую
если вам нужен самый точный ответ, то вперед к АСМу

а вообще, как обычно, передачей управления под-программе которая и вызвала функцию(под-программу)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 16.08.2009, 13:48   #14
---FISHER---
Пользователь
 
Аватар для ---FISHER---
 
Регистрация: 08.08.2009
Сообщений: 68
По умолчанию Тут как бы 50 / 50

Пишу бред, потому что не понимаю рекурсии. Плоские мозги у меня видимо. Пора мне уже извиниться по-моему, за то что Вас всех мучаю этим наверняка элементарным вопросом...
Самое дорогое, что у нас есть - это время...
---FISHER--- вне форума Ответить с цитированием
Старый 16.08.2009, 13:59   #15
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

да как бы мы тут и помогаем разобратся
(за себя говорю...темы я очень-очень редко создаю терь)

так задавай вопросы, будем помогать(думаю не один я)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 16.08.2009, 14:22   #16
---FISHER---
Пользователь
 
Аватар для ---FISHER---
 
Регистрация: 08.08.2009
Сообщений: 68
По умолчанию Мои мысли..

Просто скажите я совсем заблуждаюсь или нет..
Изображения
Тип файла: jpg Я так думаю.jpg (42.0 Кб, 157 просмотров)
Самое дорогое, что у нас есть - это время...
---FISHER--- вне форума Ответить с цитированием
Старый 16.08.2009, 14:56   #17
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

ну почти)

приведу такой примерчик:
тут Start(папка) это запуск этой процедуры для опред папки
Finish(папка) это момент заканчивания этой процедуры(чтло началась ранее)
FindD(папка) нашли папку
FindF(файл) нашли файл, значит добавляем его в список
NotFind ничего не нашли...

Цитата:
иерархия файлов и папок:
C:
-папка1
--папка11
--файл11
-папка2
-файл1
end;(надеюсь понятно)
напишу в виде иерархии аналогичной и запуски/остановки процедуры:
Цитата:
Start(C:/)
FindD(папка1)
-Start(С:/папка1)
-FindD(папка11)
--Start(C:/папка1/папка11)
--NotFind
--Finish(C:/папка1/папка11)
-FindFile(файл11)
-NotFind
-Finish(С:/папка1)
-FindF(файл1)
NotFind
Finish(C:/)
примерн так
(тут я показал вызовы/завершения процедуры при рекурсии данного типа)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 16.08.2009, 15:06   #18
---FISHER---
Пользователь
 
Аватар для ---FISHER---
 
Регистрация: 08.08.2009
Сообщений: 68
По умолчанию

Цитата:
Start(C:/)
FindD(папка1)
-Start(С:/папка1)
-FindD(папка11)
--Start(C:/папка1/папка11)
--NotFind
--Finish(C:/папка1/папка11)
-FindFile(файл11)
-NotFind
-Finish(С:/папка1)
-FindF(файл1)
NotFind
Finish(C:/)
а папку 'папка2' он не обраюатывает потому что она пустая чтоли?

Цитата:
иерархия файлов и папок:
C:
-папка1
--папка11
--файл11
-папка2
-файл1
end;(надеюсь понятно)
Самое дорогое, что у нас есть - это время...
---FISHER--- вне форума Ответить с цитированием
Старый 16.08.2009, 15:24   #19
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от ---FISHER--- Посмотреть сообщение
а папку 'папка2' он не обраюатывает потому что она пустая чтоли?
ой
обрабатывает...просто я проворонил её...
вот исправил:
Код:
Start(C:/)
FindD(папка1)
-Start(С:/папка1)
-FindD(папка11)
--Start(C:/папка1/папка11)
--NotFind
--Finish(C:/папка1/папка11)
-FindFile(файл11)
-NotFind
-Finish(С:/папка1)
FindD(папка2)
-Start(C:/папка2)
-NotFind
-Finish(C:/папка2)
FindF(файл1)
NotFind
Finish(C:/)
прошу прощения...бывает
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 16.08.2009, 15:57   #20
---FISHER---
Пользователь
 
Аватар для ---FISHER---
 
Регистрация: 08.08.2009
Сообщений: 68
По умолчанию

Спасибо
Цитата:
Пепел Феникса
. Стало чуть яснее

И вот последний тёмный уголок:
Можно ли данный участок кода
Код:
if ((SR.Attr and faDirectory)=faDirectory) and 
         ((SR.Name='.')or(SR.Name='..')) then
записать просто так:
Код:
      if ((SR.Attr and faDirectory)=faDirectory) then
Извиняюсь за флуд.... Подскажите пожалуйста
Самое дорогое, что у нас есть - это время...

Последний раз редактировалось Stilet; 17.08.2009 в 08:48.
---FISHER--- вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
С++. Поиск файлов profi Помощь студентам 2 16.06.2009 16:04
Поиск файлов hacknet Общие вопросы Delphi 23 24.11.2008 17:54
Поиск файлов LeoN Общие вопросы Delphi 5 25.11.2007 22:54
поиск файлов KORN Компоненты Delphi 3 12.10.2007 05:42