Программа поиска файла по всему диску и даже по всем дискам.
{> Cut here. FileName= WALKDRV.MSG }
- FAQ ---------------------------------------- ЧАВО - Частые Вопросы и Ответы -
Msg : 42 of 51 Addr Date
From : Dima Orlov 2:461/27 08.11.97
Subj : Как найти файлы на ВСЕХ дисках
-------------------------------------------------------------------------------
Hello, Sergei Salnikov !
> Вопрос таков : как соорудить в ТР 7.0 нечто вроде поисковой машины
> по ВСЕМУ диску ( типа FindFast в Hортоне ) .
Вот тебе и по всему диску, и даже по всем дискам:
С уважением, Дима Орлов.
--- [CONNECT Team]
* Origin: Electric BBS (0572) 477177 (2:461/27)
{> Cut here. FileName= WALKDRV.PAS }
{ From : Dima Orlov 2:461/27 08.11.97}
{ Subj : Как найти файлы на ВСЕХ дисках }
Uses DOS,CRT;
var
Stop:boolean;
Procedure FileFind(Dir,FindName : PathStr);
Procedure SearchDir(Dir : PathStr);
Var
SRec : SearchRec;
i:integer;
begin
if Stop then Exit;
if Dir[Length(Dir)] <> '\' then Dir := Dir+'\';
ClrEol;
Write(Dir,#13);
if KeyPressed then Stop := ReadKey = #27;
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;
FindFirst(Dir+'*.*', $17, 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
Stop:=False;
SearchDir(Dir);
end;
function GetCurDrive: Char;
var
r: Registers;
begin
r.ah := $19;
MSDOS(r);
GetCurDrive := Char(r.al + $41);
end;
procedure SetCurDrive(Drive: Char);
var
r: Registers;
begin
r.ah := $0E;
r.dl := Byte(Drive) - $41;
MSDOS(r);
end;
procedure WalkDrives(Name : String);
var
SaveDrive, Drive, Ch: Char;
begin
if Pos('.', Name) = 0 then Name := Name + '*.*';
SaveDrive := GetCurDrive;
for Ch := 'C' to 'Z' do
begin
SetCurDrive(Ch);
Drive := GetCurDrive;
if Drive = Ch then
begin
FileFind(Drive + ':\',Name);
if Stop then Break;
end;
end;
SetCurDrive(SaveDrive);
end;
begin
FileFind('C:','*.bak'); {search *.bak in C:}
WalkDrives('*.pas'); {search *.pas in all drives}
end.