[Back to DELPHI SWAG index] [Back to Main SWAG index] [Original]
{=============================================}
{ }
{ James L. Allison }
{ 1703 Neptune Lane }
{ Houston, Texas 77062 }
{ INTERNET:71565.303@compuserve.com }
{ }
{ Released to public domain. }
{ Nov 6, 1994 }
{ }
{=============================================}
unit Traverse;
interface
uses
SysUtils;
{+F}
type
Action = (Finished, FindMore);
Process_File = function (Path: string; Info: tSearchRec): Action;
{
Process_File is a user written procedure that does something
to a file. It then returns either Finished, telling Walk_Tree
to quit, or CONTINUE, telling Walk_Tree to keep going.
}
{
In the following, start is the path name of the directory where
traversal is to start. IT DOES NOT HAVE A TRAILING \ OR A
FILE PATTERN.
}
procedure Walk_Tree(Start: string;
Attr: word; {see FindFirst}
Recursive: boolean; {walk into subtrees}
DoIt: Process_File); {called for each hit}
(*----------------------------------------------------------------------------*)
implementation
(*----------------------------------------------------------------------------*)
procedure Walk_Tree(Start: string;
Attr: word;
Recursive: boolean;
DoIt: Process_File);
const
FilePattern = '\*.*';
var
SR: tSearchRec;
Temp: string;
Status:integer;
begin
if Start[Length(Start)] = '\' then dec(Start[0]); {just in case}
Temp := Start + FilePattern;
Status:=FindFirst(Temp, Attr, SR);
while Status = 0 do
begin
if DoIt(Start, SR) = Finished then EXIT;
if ((SR.Attr and faDirectory) <> 0)
and (SR.name <> '.')
and (SR.name <> '..')
and Recursive
then Walk_Tree(Start + '\' + SR.name, Attr, Recursive, DoIt);
Status:=FindNext(SR);
end;
end;
end.
[Back to DELPHI SWAG index] [Back to Main SWAG index] [Original]