[Back to DIRS SWAG index] [Back to Main SWAG index] [Original]
{
PO> How is one supposed to search for files? For example there is a DOS
PO> function for finding the next file and some others, but I tried those and
PO> they need a DTA (disk x-fer area). I've tried to generate my own DTA but
PO> it never works.
Here's a program I wrote sometimes ago to search files through a hard disk.
You can also redirect output to a file!
}
USES Dos, Crt;
{$M $A000, 0, 0}
TYPE
DIRT = STRING[127];
CONST
Atr = $10; { Scan only Directories (system, read only and hidden) }
VAR
ActualDir : DIRT;
drv : STRING[2];
FileDir : DIRT;
File_To_Search_For : STRING[12];
TotalSize : LONGINT;
NbFiles : LONGINT;
F : Text;
outp, quit : boolean;
ch : char;
PROCEDURE ScanFor(direc : DIRT);
VAR
FileS : SEARCHREC;
pth : PATHSTR;
Diro : DIRSTR;
Nme : NAMESTR;
Ext : EXTSTR;
BEGIN
FindFirst(direc+'\'+File_To_Search_For, AnyFile, FileS);
While DosError=0 Do Begin
IF (FileS.Name <> '.') AND (FileS.Name <> '..') Then Begin
{pth:=FileS.Name;
fSplit(pth, Diro, Nme, Ext);}
Write(direc+'\'+FileS.Name);
if outp then WriteLn(f, direc+'\'+FileS.Name);
GotoXY(60, WhereY);
WriteLn(FileS.Size);
INC(TotalSize, FileS.Size);
INC(NbFiles);
End;
FindNext(FileS);
End;
END;
PROCEDURE ScanDir(ddr : DIRT);
VAR
S : SEARCHREC;
BEGIN
{ WriteLn(ddr); }
ChDir(ddr);
ScanFor(ddr);
FindFirst('*.*', AnyFile, S);
While (DOSERROR=0) Do Begin
IF S.Attr=$10 Then Begin
IF (S.Name <> '.') AND (S.Name <> '..') Then Begin
IF Length(ddr)>3 then ScanDir(ddr+'\'+S.Name) ELSE
ScanDir(ddr+S.Name); ChDir(ddr);
End;
End;
if keypressed then begin
ch:=readkey;
if ch=#27 then quit:=true;
end;
if quit then exit;
FindNext(S);
End;
END;
PROCEDURE DoIt;
BEGIN
quit:=false;
TotalSize:=0;
NbFiles:=0;
File_To_Search_For:=ParamStr(1);
if paramcount=2 then outp:=true else outp:=false;
WriteLn('File output : ', outp);
If outp then begin
assign(f, paramstr(2));
rewrite(f);
end;
WriteLn('Searching : ');
WriteLn;
FileDir:='';
GetDir(0, ActualDir);
drv:=''; {Copy(ActualDir, 1, 2); }
ScanDir(actualdir);
If quit then begin
writeln;
writeln('Research aborted by user with ESC...');
end;
ChDir(ActualDir);
WriteLn(NbFiles, ' files listed in ', TotalSize, ' Bytes.');
WriteLn(DiskFree(0), ' free bytes.');
if outp then close(f);
END;
BEGIN
WriteLn;
WriteLn('þ Search For v1.0 By Discovery/EfS! (c)1994');
WriteLn;
IF ParamCount=0 Then Begin
WriteLn('þ Syntax : SF [FileName] [OutPut]');
WriteLn;
WriteLn('þ Where [FileName] will be searched on all directories of');
WriteLn(' current drive from current directory. ');
WriteLn(' [FileName] Accept WildCards (*, ?)');
WriteLn;
WriteLn(' If [Output] is specified, display is copied to file[output],');
WriteLn(' wihtout size... Very useful to create modules lists:)');
WriteLn;
End ELSE DoIt;
END.
[Back to DIRS SWAG index] [Back to Main SWAG index] [Original]