Текущий архив: 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.45 MB
Время: 0.009 c