![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как правильно сделать поиск файла в каталоге включая подкаталоги [D6, Win2k, WinXP]
KLOP © (2002-09-08 19:07:00)Пробовал FindFirst - FindNext, но приходится городить огород указывая все подкаталоги. А подкаталоги тройного уровня и по количеству - около сотни...
Существует ли какой нибудь способ более оптимальный ?
Я думаю, что эта задача не такая уж редкая.
Спасибо
Begin (2002-09-09 02:49:00) [1]Выдает полную структуру каталогов и подкаталогов в FolderToScan. А там уже ее можно заточить и для поиска конкретного файла ...
Begin (2002-09-09 02:46:00) [2]
Type
ItemList : array of string;
.....
Function GetFolderStructure (FolderToScan : string; IncludeScanFolder : boolean = True; FolderAttribute : Integer = $3F) : ItemList;
var
FolderArray : Itemlist;
//=================================================================================================
Procedure ScanFolder (FirstFolder : string);
var
SR : TSearchRec;
Finded : integer;
begin
FindFirst(FirstFolder+"*",FolderAttribute,SR);
repeat
if ((SR.Attr and $00000010)<>0) and (SR.Name<>".") and (SR.Name<>"..") then
begin
SetLength(FolderArray,Length(FolderArray)+1);
FolderArray[Length(FolderArray)-1]:=FirstFolder+SR.Name;
ScanFolder(FirstFolder+SR.Name+"\");
end;
Finded:=FindNext(SR);
until Finded <> 0;
FindClose(SR);
end;
//================================================================================================
begin
FolderArray:=nil;
GetFolderStructure:=nil;
if IncludeScanFolder then
begin
SetLength(FolderArray,1);
if FolderToScan[Length(FolderToScan)]="\" then FolderArray[0]:=Copy(FolderToScan,1,Length(FolderToScan)-1)
else FolderArray[0]:=FolderToScan;
end;
if FolderToScan[Length(FolderToScan)]<>"\" then FolderToScan:=FolderToScan+"\";
ScanFolder(FolderToScan);
GetFolderStructure:=FolderArray;
FolderArray:=nil;
end;
P.S. Помидорами не кидать !!! Я сам еще не профи .... :) При обнаружении ошибок и/или возникновении советов по оптимизации/ускорению приму с благодарностью.... :)
rhf (2002-09-08 22:48:00) [3]рекурсия - это когда процедура(функция) сама себя вызывает, классический пример этого вычисление факториала...
а Anatoly Podgoretsky прав, смотри в факе
и на http://delphibase.endimus.com/
Anatoly Podgoretsky (2002-09-08 20:08:00) [4]Ты бы местный FAQ посмотрел что лм, пока тебя помидорами не забросали
KLOP (2002-09-08 19:44:00) [5]Уважаемый rhfможно-ли растолковать про рекурсию...
Просто я не врубился в вышеуказанном совете.
Спасибо.
rhf (2002-09-08 19:22:00) [6]FindFirst - FindNext и рекурсия
VID (2002-09-08 19:15:00) [7]Компонент для поиска файлов:
http://www.vidsoft.nm.ru/jafilefind.rar