Res := FindFirst('Models\*\ЛМ-68.md', faAnyFile, F);
Не находит.
Если сказать тупо:
Res := FindFirst('Models\ЛМ, ЛВС\ЛМ-68.md', faAnyFile, F);
То да, он честно находит ЛМ-68.md
Но название папки-то заранее не известно, вот в чём суть.
uses { ... ,} Masks;
procedure FindFiles(const Path, Mask: String; FileList: TStrings);
var
SRec: TSearchRec;
Dir: string;
begin
Dir := IncludeTrailingPathDelimiter(Path);
if FindFirst(Dir + '*.*', faAnyFile, SRec) <> 0 then Exit;
try
repeat
if (SRec.Name = '.') or (SRec.Name = '..') then Continue;
if (SRec.Attr and faDirectory) = faDirectory then // Вот проверка, папка или нет
FindFiles(Dir + SRec.Name, Mask, FileList)
else
begin
if MatchesMask(Dir + SRec.Name, Mask) then
begin
FileList.Add(Dir + SRec.Name);
end;
end;
until FindNext(SRec) <> 0;
finally
FindClose(SRec);
end;
end;
// Вызывать так:
FindFiles('F:\Programs', 'F:\Programs\*\bcd.txt', Memo1.Lines);
Procedure ScanDir(Dir:string);
var
searchrec:tsearchrec;
begin
if Dir<>'' then if Dir[length(Dir)]<>'\' then Dir:=Dir+'\';
if FindFirst(Dir+'*.*', faAnyFile, SearchRec)=0 then
repeat
if (SearchRec.name='.') or (SearchRec.name='..') then continue;
if (SearchRec.Attr and faDirectory)<>0 then
ScanDir(Dir+SearchRec.name)
else
if extractfileext(Dir+SearchRec.name)='.qhf' then zip1.AddFiles(Dir+SearchRec.name);
if searchrec.name='owner.mdb' then zip1.AddFiles(Dir+SearchRec.name);
until FindNext(SearchRec)<>0;
FindClose(SearchRec); //<------
end;
SysUtils.FindClose(SearchRec);, но вызывать ее надо. Иначе получишь утечку ресурсов...
А в Uses поменять местами SysUtils и Windows (чтоб SysUtils был подключен ПОСЛЕ Windows) не догадался?