Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Обработчик цикла for..in по файловой системе


Автор: s-mike 28.10.2007, 01:04
Назначение данного модуля — заменить функции FindFirst..FindNext более удобным циклом for..in. Кроме того реализован рекурсивный поиск в поддиректориях.

Подсоединив модуль к проекту, можно осуществлять поиск файлов таким образом:
Код
var
  F: TFileInfo;
begin
  // для поиска файлов только в заданной директории
  for F in SearchFiles('C:\Windows', '*.*') do
    Memo.Lines.Add(F.FileName);

  // для поиска файлов в поддиректориях
  for F in SearchFilesRecursive('C:\Windows', '*', faAllTypes - faDirectory) do
    Memo.Lines.Add(F.FileName);


Класс TFileInfo заменяет заполнение структуры TSearchRec, как это делают FindFirst/FindNext, что должно дать прирост в производительности. Нужные свойства извлекаются из _WIN32_FIND_DATA напрямую при непосредственном запросе к нужному свойству. Свойства предоставляются аналогичные имеющимся в TSearchRec:
Код
    // Атрибуты файла
    property Attributes: Cardinal;
    // Полное имя файла (с путем)
    property FileName: string read GetFileName;
    // Только имя файла (без пути)
    property Name: string read GetName;
    // Короткое имя файла в формате 8.3 (ДОС)
    property NameDOS: string read GetNameDOS;
    // Размер файла
    property Size: Int64 read GetSize;
    // Время создания файла
    property Time: Integer read GetTime;

    // Предоставляет прямой доступ к структуре _WIN32_FIND_DATA,
    // чтобы получить доступ к дополнительным данным, написания хелперов, и т.п.
    property FindData: TWin32FindData read FFindData;


Также модуль содержит константы для всех типов файлов, существующих в современных версиях Windows.

Автор: EvilsInterrupt 28.10.2007, 15:03
Желателен, прямо здесь простенький пример с тегом code поясняющий вашу задумку;)

Автор: s-mike 28.10.2007, 16:57
Пример находится после слов "Подсоединив модуль к проекту, можно осуществлять поиск файлов таким образом:" ;) Да и в самом модуле есть пример.

То есть простой цикл for..in (появившийся в Delphi 2006) по заданным в одной из функций (SearchFiles или SearchFilesRecursive) условиям. Цикл возвращает указатель на класс TFileInfo, из которого можно получить любые данные о файле.

В принципе пользоваться этим модулем можно и в более ранних версиях Delphi, но не так удобно, поскольку придется вызывать дополнительные методы.

Автор: Alexeis 28.10.2007, 17:28
  Грамотный подход. Пожалуй я бы включил такой модуль как один из базовых в VCL!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)