FinfFirstFile и неверный результат поиска ?
От: Tujh Голландия  
Дата: 01.02.11 08:36
Оценка:
Столкнулся с интересным поведением связки 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

Заранее благодарю за подсказанное решение.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.