![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
мне нужно найти файл на диске... имя и расширение известно соответсвенно)
|
|
#2
|
|||
|
|||
|
Код:
var
filename:string; //имя файла,которого ищем
Cdir:string; //имя папки,в которой надо искать
n:integer; //кол-во найденных файлов
procedure find;
var search:Tsearchrec;
begin
getDir(0,Cdir);
if Cdir[length(Cdir)]<>'\' then Cdir:=Cdir+'\';
if findfirst(filename,faAnyFile,search)=0 then
repeat
if (search.Attr and faAnyFile)=search.Attr then begin
form1.Memo1.Lines.Add(Cdir+search.Name);
inc(n);
end;
until findnext(search)<>0;
if findfirst('*',faAnyFile,search)=0 then
repeat
if (search.Attr and faDirectory)=faDirectory then
if search.Name[1]<>'.' then begin
chdir(search.Name);
find;
chdir('..');
end;
until findnext(search)<>0;
end;
Последний раз редактировалось Ozerich, 19.05.2008 в 15:14. |
|
#3
|
||||
|
||||
|
Можно попроще сделать, ибо рекурсия рулит. Параметры : Path - где искать, можно указывать диск (С:, D:...), SearchMask - маска, для поиска определенного файла можно написать тут имя файла, Memo - обычный мемо редактор, куда будут выводится результаты поиска.
Код:
procedure Find(const Path, SearchMask : String; var Memo : TMemo);
var
fs : TSearchRec;
i : Integer;
begin
Application.ProcessMessages;
i := FindFirst(Path + '\' + SearchMask, faAnyFile, fs);
while i = 0 do begin
Memo1.Lines.Add(path + '\' + fs.Name);
i := FindNext(fs);
end;
i := FindFirst(Path + '\*', faDirectory or faAnyFile, fs);
while i = 0 do begin
if (fs.Name <> '.') and (fs.Name <> '..') and
((fs.Attr and faDirectory) <> 0) then
Find(Path + '\' + fs.Name, SearchMask, Memo);
i := FindNext(fs);
end;
FindClose(fs);
end; |