Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.02.17;
Скачать: CL | DM;

Вниз

Помогите с поиском файлов   Найти похожие ветки 

 
Шишкин Илья ©   (2003-02-08 21:47) [0]

Ищу файлы так:

procedure FindFiles(Path: String; Mask: string; SaveTo: TStrings);
var
SearchRec: TSearchRec;
TargetPath: String;
begin
TargetPath:=ExcludeTrailingBackslash(Path);
Application.ProcessMessages;
If (TargetPath <> "") then
begin
if (FindFirst(TargetPath+"\"+"*", faAnyFile, SearchRec) = 0) then
begin
if ((StrPos(PChar(UpperCase(SearchRec.Name)),PChar(UpperCase(mask)))<>nil) or (mask="")) and (fileexists(TargetPath+"\"+SearchRec.Name)) then SaveTo.Add(TargetPath+"\"+SearchRec.Name);
While (FindNext(SearchRec) = 0) do
Begin
if ((StrPos(PChar(UpperCase(SearchRec.Name)),PChar(UpperCase(mask)))<>nil) or (mask="")) and (fileexists(TargetPath+"\"+SearchRec.Name)) then SaveTo.Add(TargetPath+"\"+SearchRec.Name);
If DirectoryExists(TargetPath+"\"+SearchRec.Name) and (SearchRec.Name <> "..")
and (SearchRec.Name <> "...") then FindFiles(TargetPath+"\"+SearchRec.Name, Mask, SaveTo);
Application.ProcessMessages;
End;
end;
end;
FindClose(SearchRec);
end;


procedure TForm1.Button1Click(Sender: TObject);
var
mask:string;
path:string;
begin
Memo1.Lines.Clear;
path:="C:\Program Files\";
mask:="exe";
FindFiles(path,mask,Memo1.Lines);
MessageBox(0,PCHar("Найдено: "+IntToStr(memo1.lines.Count)),"Внимание",MB_OK);
end;


Но почему-то находятся не все файлы. По тем же самым критериям "Поиск" в Windows находит намного больше.
В чём ошибка?


 
Palladin ©   (2003-02-08 22:37) [1]

какое нагроможение кода и не нужных условий...
если чесно даже разбиратся не хочется...

procedure ScanDir(StartDir: string; Mask:string; List:TStrings);
var
SearchRec:TSearchRec;
begin
if Mask = "" then Mask := "*.*";
if StartDir[Length(StartDir)]<>"\" then StartDir:=StartDir+"\";
if FindFirst(StartDir+Mask, faAnyFile, SearchRec)=0 then
begin
repeat
Application.ProcessMessages;
if (SearchRec.Attr and faDirectory)<>faDirectory then
List.Add(StartDir + SearchRec.Name);
until FindNext(SearchRec) <> 0;
FindClose(SearchRec);
end;
if FindFirst(StartDir+"*.*", faAnyFile, SearchRec)=0 then
begin
repeat
Application.ProcessMessages;
if ((SearchRec.Attr and faDirectory)=faDirectory) and
(SearchRec.Name<>".") and
(SearchRec.Name<>"..") then ScanDir(StartDir+SearchRec.Name+"\",List);
until FindNext(SearchRec) <> 0;
FindClose(SearchRec);
end;
end;


честно украдено из FAQ у Anatoly Podgoretsky ©
и немного изменено, что бы восклицаний "не работает" не было.



Страницы: 1 вся ветка

Текущий архив: 2003.02.17;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.013 c
4-53330
Groove_
2003-01-07 14:10
2003.02.17
Ещё вопросик возник


1-52933
Чайник
2003-02-08 22:34
2003.02.17
Помогите чайнику


3-52748
Nikolai_S
2003-01-30 16:17
2003.02.17
Помогите разобраться с форматами дат на SQL-Server е!


7-53304
maxim2
2002-12-16 06:11
2003.02.17
Как создать в реестре параметр Dword


3-52791
DieM@N
2003-01-29 02:33
2003.02.17
ламеру нужна помощь очень!