![]() |
Модераторы: Snowy, MetalFan, bems, Poseidon |
![]() ![]() ![]() |
|
THandle |
|
||||||||||||||||||||||
![]() Хранитель Клуба ![]() Награды: 1 Профиль Группа: Админ Сообщений: 3639 Регистрация: 31.7.2007 Где: Moscow, Dubai Репутация: 50 Всего: 372 |
Задание.
Вывести список всех файлов, находящихся в заданной папке и её поддиректориях. Решение.
Объяснение.
Dir - каталог из которого нужно вывести имена файлов. Strings - список, в который будут добавлены имена всех файлов.
Если список для имен файлов не создан или строка с директорией является пустой, то выходим из процедуры.
Если в конце строки преданной в Dir нет бэкслеша, то добавляем его.
Ищем любой файл, если находим, то продолжаем работу процедуры, иначе - конец. В цикле repeat...until делаем следующее:
Если что-то нашли, то:
Если найдена директория, то рекурсивно проводим поиск в ней, вызвав LstFilesInDirectory с соответствующими параметрами, иначе добавляем имя файла в список:
Если больше ничего не найдено, то завершаем процедуру. Пример вызова. На форме находятся следующие компоненты: TButton - по нажатию кнопки и делаем вызов нашей процедуры. TEdit - сюда вписываем путь к папке в которой надо производить поиск (например C:). TListBox - сюда выводим имена файлов.
Это сообщение отредактировал(а) THandle - 4.12.2008, 15:15 |
||||||||||||||||||||||
|
|||||||||||||||||||||||
Qu1nt |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 602 Регистрация: 13.1.2007 Репутация: 22 Всего: 50 |
Чтобы бы избежать [Pascal Warning]:
меняем на
К тому же, я бы добавил в конец процедуры ListFilesInDirectory:
Это сообщение отредактировал(а) Qu1nt - 8.4.2008, 10:41 |
||||||
|
|||||||
Rennigth |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 21.6.2004 Где: Moscow Репутация: 15 Всего: 76 |
Плюс я бы объявление процедуры сделал бы так:
зачем строки копировать на право на лево?... ![]() -------------------- (* Honesta mors turpi vita potior *) |
|||
|
||||
Qu1nt |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 602 Регистрация: 13.1.2007 Репутация: 22 Всего: 50 |
Rennigth, тогда не сработает IncludeTrailingPathDelimiter.
|
|||
|
||||
THandle |
|
|||
![]() Хранитель Клуба ![]() Награды: 1 Профиль Группа: Админ Сообщений: 3639 Регистрация: 31.7.2007 Где: Moscow, Dubai Репутация: 50 Всего: 372 |
Qu1nt, спасибо. Сейчас изменю. FindClose забыл, каюсь.
![]() |
|||
|
||||
Rennigth |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 21.6.2004 Где: Moscow Репутация: 15 Всего: 76 |
угумс, не заметил... но я в таких случаях доп переменную ввожу. это конечно уже дело каждого ![]() -------------------- (* Honesta mors turpi vita potior *) |
|||
|
||||
MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 22 Всего: 128 |
ага, так же я бы добавил проверку на Dir <> '', ибо если придет пустышка, то начнется поиск с корня текущего диска...
Добавлено через 1 минуту и 38 секунд а еще мне понравился подход, предложенный на sources.ru Обработчик цикла for..in по файловой системе, готовое решение для Delphi 2006 и выше -------------------- There are always someone smarter than you... |
|||
|
||||
THandle |
|
||||
![]() Хранитель Клуба ![]() Награды: 1 Профиль Группа: Админ Сообщений: 3639 Регистрация: 31.7.2007 Где: Moscow, Dubai Репутация: 50 Всего: 372 |
MetalFan, оно и тут есть.
http://forum.vingrad.ru/faq/topic-179211.html ![]() Но это уже не совсем для новичков.
Мне такой подход не очень нравится. Не люблю проверять в самой процедуре\функции. Обычно делаю проверку и если что то не так показываю об этом сообщение. Если уж добавлять, то ИМХО, так:
|
||||
|
|||||
MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 22 Всего: 128 |
как раз, имхо, не вдаваясь в подробности, проще и нагляднее пользоваться тем методом. тогда не будет предусмотрена защита от дурака. простой пример - функция очистки директории. на вход - путь, внутри используется твоя функция. после чего все найденные файлы удаляются. тогда при "случайной" передаче "пустышки" очистим нафиг корень диска... лучше уж элементарную проверку предусмотреть -------------------- There are always someone smarter than you... |
|||
|
||||
THandle |
|
|||
![]() Хранитель Клуба ![]() Награды: 1 Профиль Группа: Админ Сообщений: 3639 Регистрация: 31.7.2007 Где: Moscow, Dubai Репутация: 50 Всего: 372 |
Ну не знаю. Всё равно там то с 2006, а у новичков обычно 7. Пусть будет и тот пример, и этот. Тут к тому же уже ссылка на тот дана. Кому надо - посмотрят. Ладно. Тут убедил. ![]() ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |