Показать сообщение отдельно
  #3  
Старый 16.02.2009, 16:06
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,096
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну, здесь такое сложное решение даже не нужно. Достаточно просто периодически запускать скан папки с подпапками. Сложнее всего будет с фильтрацией. Если позиции по 2 и 3 пунктам точно фиксированные, то и тут все несложно. Тебе нужны функции FindFirst/FindNext/FindClose и MatchesMask.

Алгоритм примерно такий.
В памяти делжим список найденных файлов.
Перед поиском его очищаем.
Начинаем поиск с корня указанной папки.
Если найденный объект есть папка - идем внутрь и рекурсивно вызывем ту же процку.
Если файл то:
1. проверяем расширение по маске
2. проверяем номер по позициям в имени файла
3. проверяем дату
Если все проверки прошли, то добавляем файл в список. Если нет, то не добавляем.

шаблон:
Код:
var
  FoundFiles : TStringList;

function CheckFile(AFileName : String; AExt : Array Of String; Awarehouse : String; ADate : String) : Boolean;
begin
  Result := False;
  // Здесь проверяем на соотв. условиям. Лень писать.
  // Если все проверки прошли, то Result := True;
end;

procedure DoFindFiles(APath : String; AExt : Array Of String; Awarehouse : String; ADate : String);
var
  F : TSearchRec;
  iFound : Integer;
begin
  iFound := FindFirst(APath + '*.*',faAnyFile,F);
  While iFound = 0 Do
    Begin
      If (F.Attr and faDirectory) <> 0 
        Then DoFindFiles(APath + F.Name + '\',AExt,AWarehouse,ADate)
        Else
          If CheckFile(F.Name,AExt,AWarehouse,ADate)
             Then FoundFiles.Add(APath + F.Name);
      iFound := FindNext(F);
    End;
  FindClose(F);
end;

proedure FindFiles(APath : String; AExt : Array Of String; Awarehouse : String; ADate : String);
begin
  FoundFiles.Clear;
  DoFindFiles(APath,AExt,AWarehouse,ADate);
end;
Ответить с цитированием