Не так уж и часто, но бывает надо в программе получить список файлов или поддиректорий в каталоге. Для тех, кто использует KOL и MCK открываются аж 3 способа решения этой проблемы. Правда нормальный, по моему мнению, все-таки только один 🙂 Рассмотрим все.
1-й способ. » Традиционный .»
Традиционно пользуются 3-мя API функциями: FindFirstFile (ищет первый файл из списка файлов), FindNextFile (ищет следующий файл) , FindClose (прекращение поиска). Обычно первые 2-е функции заменются их VCL-суррогатами FindFirst, FindNext. Для нас, они не совсем приемлемы, так как для того чтобы воспользоваться этими функциями, надо подключить библиотеку Sysutils. А это как известно добавляет лишний жирок в наши атлетически сложенные программы :-). Пример на чистом API с примесью KOL.
Пояснения на счет атрибутов для искомых файлов:
- FILE_ATTRIBUTE_ARCHIVE — архивный файл.
- FILE_ATTRIBUTE_COMPRESSED — сжатый файл или папка.
- FILE_ATTRIBUTE_HIDDEN — скрытый файл.
- FILE_ATTRIBUTE_NORMAL — обычный файл.
- FILE_ATTRIBUTE_OFFLINE — данные файла недоступны. Указывает, что данные файлы были физически перемещены.
- FILE_ATTRIBUTE_READONLY — файл только для чтения.
- FILE_ATTRIBUTE_SYSTEM — системный файл.
- FILE_ATTRIBUTE_TEMPORARY — временный файл.
- FILE_ATTRIBUTE_DIRECTORY — директория
2-й способ. «В лоб.»
Несмотря на простоту представленного кода эту операцию можно сделать еще проще т.к. ListBox сам может показать файлы в определенной директории. Для этого надо обратится к свойству AddDirList . Пример еще меньше.
Это конечно интересный способ получать список файлов, но не функциональный 🙂 Не создавать ведь на окне каждый раз ListBox или СomboBox (он тоже имеет это же свойство), чтобы получить список файлов. Да и почему-то выводимый список файлов в виде » коротких имен » (т.е. как будто в DOS). Скорее всего Владимир Кладов добавил это свойство как интересную фичу и не более.
3-й способ. » Как положено «
Ну и самое интересное 🙂 В KOL есть объект предназначенный для создания списка фалов. Это PDirList. Вот его конструктор:
DirPath — сканируемая директория
Filter — фильтр для файлов или каталогов
Attr — атрибуты
Список методов и свойств для работы с этим обьектом:
Сортировка списка файлов. Rules (условие сортировки) может быть следующим :
- sdrNone — обойдемся без сортировки
- sdrFoldersFirst — сначала идет каталог, а только затем файл.
- sdrCaseSensitive
- sdrByName — по имени
- sdrByExt — по расширению
- sdrBySize — по размеру
- sdrBySizeDescending
- drByDateCreate — по дате создания
- sdrByDateChanged — по дате изменения
- sdrByDateAccessed -по дате доступа
| property Items [ Idx: Integer ]: PWin32FindData | Получить доступ к структуре PWin32FindData для файла идущего под номером Idx. Подробности об PWin32FindData смотрите в Win32.hlp и в примере » стандартного » создания списка фалов |
| property IsDirectory [ Idx: Integer ]: Boolean; | Возвращает true если запись под номером Idx в списке не является файлом. |
| property Count : Integer; |
Возвращает количество пунктов в списке |
| property Names [ Idx: Integer ]: string; | Возвращает полное имя файла (или каталога) находящимся в списке под номером Idx. |
| property Path : string; | Путь текущей просканированной директории. |
Пример. Наверху в окне находится список дисков. Ниже находится список файлов и подкаталогов, находящихся в центральных каталогах этих дисков.
Размер кода 1,8 Кб. Размер программы 34,5 Кб (без сжатия и замены модулей). На экране увидите Вы примерно следующее:

Delphi , Файловая система , Директории
Статья Получение списка вложенных каталогов раздела Файловая система Директории может быть полезна для разработчиков на Delphi и FreePascal.
Комментарии и вопросы
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
Я работаю с delphi, мне нужен список всех файлов каталога при выполнении openpicturedialog.
т. е., когда выполняется открытый диалог и я выбираю один файл из него, я хочу список всех файлов из каталога выбранного файла.
вы даже можете предложить мне получить имя каталога из FileName собственность TOpenDialog
спасибо.
4 ответов
@Himadri, основной целью OpenPictureDialog не является выбор каталога, в любом случае, если вы используете этот диалог с другой целью, вы можете попробовать этот код.
Если вы используете delphi 2010, Вы можете использовать tdirectory.заражен сначала добавить ioutils.pas to uses затем напишите следующую строку кода в обработчике событий (в дополнение к коду, который у вас уже есть в этом обработчике событий)
изменить фильтр свойство в вашем OpenPictureDialog, чтобы включить все файлы:
редактировать: Я не думаю, что вы можете выбрать каталог в диалоговом окне Open(Picture), это, безусловно, не является целью OpenPictureDialog в любом случае. Возможно!—8—>этой это то, что вы ищете.
затем использовать метод findfirst и методы findnext чтобы получить файлы в этот каталог.
вы можете использовать функцию extractFilePath, чтобы получить имя каталога:
где FileName-имя файла, которое вы выбираете OpenDialog.