![]() |
|
#3
|
|||
|
|||
![]() Ну, здесь такое сложное решение даже не нужно. Достаточно просто периодически запускать скан папки с подпапками. Сложнее всего будет с фильтрацией. Если позиции по 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; |