Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Поиск файла


Автор: aktuba 22.2.2007, 13:31
Код

lRes := FindFirst(lPath + '*.dll', faAnyFile, SR);
  try
    while lRes = 0 do
      begin
        
        lRes := FindNext(SR);
      end;
  finally
    FindClose(SR);
  end;


Почему этот код находит все файлы, у которых расширение начинается на .dll, т.е. кроме file.dll находит также file.dllwww и т.д.???

Автор: W4FhLF 22.2.2007, 13:49
Маска поиска в твоём случае должна быть вида: Path + '\*.dll'. Убедись, что у тебя на конце lPath есть слеш.

Автор: aktuba 22.2.2007, 13:55
Цитата

Маска поиска в твоём случае должна быть вида: Path + '\*.dll'. Убедись, что у тебя на конце lPath есть слеш. 


Слэш в конце есть. Если бы не было, функция не находила бы вообще ничего...

Автор: Snowy 22.2.2007, 14:14
Так ищет винда.
Дело не в дельфе - у винды много странноствей с поиском файлов.
Проверяй расширение вручную.

Автор: Alexeis 22.2.2007, 14:18
Судя по намекам MSDN анси версия поиска (FindFirstFile) внутри работает по системе 8.3 т.е. расширение файлов не должно иметь более 3 символов. В NT / 2000 / XP есть юникодная версия этой функции, которая работает с путями неограниченной длинны, и как следствие не должно быть ограничений по 8.3
Т.е. функции FindFirstFileW / FindNextFileW

Автор: Snowy 22.2.2007, 14:27
Они обе работают по 8.3
И обе возвращают одинаковый результат.

Автор: W1zArD 22.2.2007, 15:26
Код

var st:TSearchRec;
s:string;
begin
if FindFirst(ExtractFilePath(ParamStr(0))+'*.dll', faAnyFile, SR)=S_OK then    
repeat
if ExtractFileExt(sr.Name)='dll' then ListBox1.Items.Add(sr.name);
until FindNext(sr)<>S_OK;
FindClose(SR);    
end;


а для проверки на наличие слеша в конце можно:
1. исп-ть функц IncludeLast из модуля FileCtrl что-то там ))) (я из кафе так что названия точно не помню)
2. проверять последний символ на '\'  smile 

Автор: Snowy 22.2.2007, 15:36
Проблема не в коде, а в том, что у файла file.dllXXX расширение реально dll
В этом можно убедиться, конвертнув в короткое имя.
Поэтому поиск его в список и включает.

Автор: Snowy 22.2.2007, 15:58
фильтруй вручную.
хотя зачем? если расширение кривое, то это не твоя проблема.
если я текстовик переименую в dll, что тогда?
Я бы не фильтровал бы, а пробовал бы работпть.
Если нет, значит не моё.

Автор: aktuba 22.2.2007, 16:27
Цитата

фильтруй вручную.
хотя зачем? если расширение кривое, то это не твоя проблема.
если я текстовик переименую в dll, что тогда?
Я бы не фильтровал бы, а пробовал бы работпть.
Если нет, значит не моё. 


В принципе у меня так и делается. Ищутся файлы с определенным расширением, подгружаю их как dll и проверяю, есть ли определенная функция...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)