delphi получить список файлов в каталоге

Не так уж и часто, но бывает надо в программе получить список файлов или поддиректорий в каталоге. Для тех, кто использует 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 — атрибуты

Список методов и свойств для работы с этим обьектом:

procedure Clear ; Очищает текущий список с файлами. procedure ScanDirectory ( const DirPath, Filter: String; Attr: DWord ); Сканирует директорию DirPath. Все передаваемые значения идентичны конструктору. procedure Sort ( Rules: array of TSortDirRules );

Сортировка списка файлов. 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 Кб (без сжатия и замены модулей). На экране увидите Вы примерно следующее:

Copyright © 2004-2019 «Delphi Sources». Delphi World FAQ

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.

Оцените статью