Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.013 c
1-53034
Le!
2003-02-06 08:11
2003.02.17
Народ помогите!


3-52804
vikser
2003-01-31 17:02
2003.02.17
Консольное приложение и DataModule с ADO????


1-52936
pop-corn
2003-02-09 00:00
2003.02.17
Подскажите, как скопировать директорию, привязав к ProgressBar?


8-53126
Kaban
2002-11-05 11:13
2003.02.17
Показания кардиографа


1-52837
Anton
2003-02-07 14:02
2003.02.17
Не работае пример из helpa




   Наверх