- 4INT ----------------------------------------------------- It's interesting -
Msg : 101 of 200 Addr Date
From : Dima Orlov 2:461/27 08.07.97
Subj : DIR C: /S
-------------------------------------------------------------------------------
Hello, Anton Kapcinel !
AK> Hаpод,а как к пpимеpу весь диск с: пpовеpить на существование файлов
AK> '*.txt' ? То есть пpогу как написать, котоpая заданный файл по всему
AK> диску ищет ???
Пора бы уже в ФАК это вставить...
Для поиска используются FindFirst & FindNext.
Причем их приходится вызывать дважды:
Первый раз для указанных файлов, а второй раз -
чтобы найти все вложенные подкаталоги.
С уважением, Дима Орлов
--- [CONNECT Team]
* Origin: Electric BBS (0572) 477-177 (2:461/27)
{> Cut here. FileName= FILEFIND.PAS }
{ From : Dima Orlov 2:461/27 08.07.97}
Uses DOS;
Procedure FileFind(Dir,FindName : PathStr);
{Поиск файлов по маске по всему диску}
Procedure SearchDir(Dir : PathStr);
Var
SRec : SearchRec;
begin
{Поиск файлов по маске}
if Dir[Length(Dir)] <> '\' then Dir := Dir+'\';
FindFirst(Dir + FindName, AnyFile, SRec);
While DosError = 0 do
begin
With SRec do
if Attr and (VolumeID + Directory) = 0 then
WriteLn(Dir + Name);
FindNext(SRec);
end;
{Поиск всех вложенных каталогов, в т.ч. скрытых, системных, r/o}
FindFirst(Dir+'*.*', Directory or ReadOnly or Hidden or SysFile, SRec);
While DosError = 0 do
begin
With SRec do
if (Attr and Directory <> 0) and (Name[1] <> '.') then
SearchDir(Dir+Name);
FindNext(SRec);
end;
end;
begin
SearchDir(Dir);
end;
{------------------------------------------}
{Пример поиска всех .TXT файлов на диске С:}
begin
FileFind('c:\','*.txt');
end.
|