Subj : Deltree?
To   : Lee Aroner
From : Eddy Thilleman
Date : Thu May 10 2001 12:52 am

Hello Lee,

Tuesday 08 May 2001 13:35, Lee Aroner wrote to Eddy Thilleman:

ET>> With a recursive routine, it's easy. If you want my source, let me
ET>> know.

I've also made a non-recursive one ages ago, it's in pascal and for DOS (I
haven't ported that one).

LA>    Why sure. Always happy to see other folk's ideas on coding.
LA>    Appreciate that sir...

I use Virtual Pascal/2. I've also compiled it successfully with Speed Pascal
v1.5.
Here is the bare bones version (some lines will be wrapped):

------------------- begin of deltree.pas -------------------
uses DOS;
{$I-}

Var
 i       : byte;
 keepdir : boolean;
 written : LongInt;
 IORes   : LongInt;
 f       : file;

{$S+}
Procedure DelPath( path: string );
var
 DR : SearchRec;

begin
 FindFirst( path + '\*', AnyFile, DR );
 while (DosError = 0) do
 begin
   if (DR.Attr and Directory) = Directory then
     begin
       if ((DR.Name <> '.') and (DR.Name <> '..')) then
       begin
         DelPath( path + '\' + DR.Name );
         RmDir( path + '\' + DR.Name );
         IORes := IOResult;
         if IORes = 0 then
           writeln( path + '\' + DR.Name + ' removed' )
         else
           begin
             writeln( 'Error ', IORes, ' removing ' + path + '\' + DR.Name );
             Halt( IORes );
           end;
         { if dir removed }
       end
     end
   else
     begin
       Assign( f, path + '\' + DR.Name );
       Erase( f );
       IORes := IOResult;
       if IORes = 0 then
         writeln( path + '\' + DR.Name + ' deleted' )
       else
         begin
           writeln( 'Error ', IORes, ' deleting ' + path + '\' + DR.Name );
           Halt( IORes );
         end;
       { if file deleted }
     end;
   {}
   FindNext( DR );
 end;
end;
{$S-}


begin
 keepdir := False;
 for i := 1 to ParamCount do
 begin
   if (paramstr( i ) = '/k') or (paramstr( i ) = '/K') then
     keepdir := True
   else
     begin
       DelPath( paramstr( i ) );
       if not keepdir then
       begin
         RmDir( paramstr( i ) );
         IORes := IOResult;
         if IORes = 0 then
           writeln( paramstr( i ) + ' removed' )
         else
           begin
             writeln( 'Error ', IORes, ' removing ' + paramstr( i ) );
             Halt( IORes );
           end;
         { if dir removed }
       end; { if not keepdir }
     end;
   { parameter /q ? }
 end;
end.
-------------------- end of deltree.pas --------------------

Enjoy! :-)


 Greetings   -=Eddy=-

 email: [email protected]
        [email protected]

... He who laughs last uses OS/2.
--- GoldED/2 3.0.1
* Origin: Do still life on your computer -- run WinDOZE. (2:280/5143.7)