![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Поиск в подкаталоге [D6, Win2k, WinXP]
Phoenix9000 © (2005-03-01 17:36:00)Доброго времени суток.
Вопрос : Как осуществить поиск по подкаталогам и файлам, типа того, как делается в Windows?? Каталог стационарный, критерии поиска вводятся в поле edit.
Требуется пример кода.
Заранее спасибо всем кто откликнется.
nes (2005-03-01 21:39:00) [1]Грр...если файл найден,то получаешь dir папки и задаёшь root в ShellListView
Anatoly Podgoretsky (2005-03-01 19:54:00) [2]И что тебе препятсвует?
Phoenix9000 (2005-03-01 18:31:00) [3]2 Fay
В уточнении знаки вопроса не ставятся. :)
Fay (2005-03-01 18:28:00) [4]2 Phoenix9000 © (01.03.05 18:13) [8]
А где предполагалось поставить вопросительный знак ?
Phoenix9000 (2005-03-01 18:13:00) [5]Ну Считай продолжением вопроса. Я посмотрел ответы, ну и уточнил.
Fay (2005-03-01 18:09:00) [6]2 Phoenix9000 © (01.03.05 18:04) [6]
>> Уточню. ....
Это продолжение вопроса, или крутая реклама?
Phoenix9000 (2005-03-01 18:04:00) [7]Всем большое спасибо.
Уточню. Пользователь вводит в поле edit текст , например "ива", а программа должна найти и выдать в какой нить компонент (ShellListView) список файлов и подкаталогов в названии которых присутствует "ива" (т.е. как делает Windows). Далее при двойном клике на файле из списка он должен запуститься.
ANB (2005-03-01 17:47:00) [8]Для поиска всего остального подкорректируй if (((SearchRec.Attr and faDirectory) <> 0)
Cosinus (2005-03-01 17:46:00) [9]http://narod.yandex.ru/cgi-bin/yandmarkup?cluster=14&prog=0x2757571A&HndlQuery=1014696432&PageNum=1&g=12&d=0&q0=1384970640&p=1
MBo (2005-03-01 17:45:00) [10]FindFirst/FindNext
ANB (2005-03-01 17:45:00) [11]
procedure FindRecurseTempFolder(sPath : String;
var sFolderList : String; var iErr : Integer);
var SearchRec: TSearchRec;
FileAttrs, rc : Integer;
sName, sFullName : String;
begin
{Рекурсивный поиск списка папок}
Application.ProcessMessages;
if (fmLog.bStop) then Exit;
FileAttrs := 1 + faDirectory
+faHidden+faArchive+faAnyFile;
rc:= SysUtils.FindFirst(sPath+'*.*', FileAttrs, SearchRec);
if (rc = 0) then begin
repeat
Application.ProcessMessages;
if (fmLog.bStop) then Break;
sName := SearchRec.Name;
if (((SearchRec.Attr and faDirectory) <> 0) and (sName <> '.') and (sName <> '..'))
then begin
sFullName := sPath + sName + '\';
fmLog.SetCurrent(sFullName);
// Проверим, не входит ли данная папка в поисковый список
if (Pos('|'+UpperCase(Trim(sName))+'|', sFolderList) > 0)
then begin
// Если да - ругаемся в лог
fmLog.AddErr('Временная папка '+sName+' обнаружена на пути '+sPath);
Inc(iErr);
end;
// Вызовем сами себя рекурсивно
FindRecurseTempFolder(sFullName, sFolderList, iErr);
end;
Application.ProcessMessages;
if (fmLog.bStop) then Break;
until FindNext(SearchRec) <> 0;
FindClose(SearchRec);
end;
end;
Лишнее сам выкинешь. Вместо *.* свою маску поставишь.
Этот пример ищет только папки. Все, что с fmLog - можешь выбросить, это моя форма лога.
Nes (2005-03-01 17:41:00) [12]Всмысле?Нужно, чтобы в определённом каталоге определённый файл рыскал?