Столкнулся с интересным поведением связки FindFirstFile + FindNextFile
Сам проект на С++, но для быстрого воспроизведения набросал пример на Делфи
(нужна юникодовая версия, но мультибайтная ведет себя точно так же)
procedure TForm1.Button1Click(Sender: TObject);
var
l_find_data : TWin32FindDataW;
l_hfind : THandle;
sw : widestring;
begin
Memo1.Lines.Clear;
sw := widestring( '\\?\' + ExtractFileDir( ParamStr( 0 ) ) + '\' + Edit1.text );
l_hfind := FindFirstFileW( PWideChar( sw ), l_find_data );
if not( l_hfind = cardinal( -1 ) ) then
begin
repeat
Memo1.Lines.Add( string( l_find_data.cFileName ) );
until( FindNextFileW( l_hfind, l_find_data ) = FALSE );
Windows.FindClose( l_hfind );
end;
end;
Суть простая — задаю маску и хочу получить список файлов, но вот тут то и притаился зверек с ценным мехом (или моё недопонимание WinAPI)
по маске *.pas мне находятся "лишние" файлы (действительно существующие в папке, но которые не должны отображаться в результатах поиска)
Unit1.pas
Unit1.pas_
Unit1.pas1
причем, если задаю *.pa? — результат тот же, ОС — WinXP SP3
Заранее благодарю за подсказанное решение.