Информационный сервер для программистов: Исходники со всего света. Паскальные исходники со всего света
  Powered by Поисковый сервер Яndex: Найдется ВСЁ!
На Главную Pascal Форум Информер Страны мира
   ЧАВО - Частые Вопросы и Ответы    >>    walkdrv
   
 
 FIL. Как найти файлы на ВСЕХ дисках   Dima Orlov 08.11.1997

Программа поиска файла по всему диску и даже по всем дискам.


 
 

{> 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.