[Back to FILES SWAG index]  [Back to Main SWAG index]  [Original]

{
From: russchinoy@aol.com (RussChinoy)
>Does anyone have know of where I can get a hold of a routine to delete
>all files off a floppy disk regardless, including all subdirectores?

Here's the source to a little DOS utility that I wrote to do exactly what
you are looking for (actually, it's slightly more flexible since you can
specify the starting directory; you can just specify the root), using a
recursive routine.
}

{$A-,B-,D-,E-,F-,G-,I-,L-,N-,O-,R-,S-,V-,X+}
{$M 65520, 0, 0}

PROGRAM XRD;

{ This program deletes all files and subdirectories below the specified
  directory, and then removes the specified directory as well.          }

USES
    Dos,
    OpDos,
    OpCrt,
    OpString;

CONST
     Version = '1.01';

VAR
   XRDPath : PathStr;
   f       : file;

{*************************************************************************
**}

PROCEDURE Init;
VAR
   TempPath : PathStr;
   c        : char;
BEGIN
writeln;
writeln('XRD, Version ', Version, ', Copyright (c) 1992 RC Software');
writeln;
IF paramcount <> 1 THEN
   BEGIN
   writeln('   Purpose:  XRD removes the specified directory, and');
   writeln('             all files and subdirectories under it.');
   writeln;
   writeln('   Syntax:   XRD [d:]<path>');
   writeln;
   writeln('   Where:    d: is an optional drive specifier, and');
   writeln('             <path> is the path to be removed.');
   writeln;
   halt(1);
   END;

XRDPath := paramstr(1);

IF NOT IsDirectory(XRDPath) THEN
   BEGIN
   writeln('Error: specified path not found.');
   writeln;
   halt(2);
   END;

XRDPath := fexpand(XRDPath);

IF XRDPath[length(XRDPath)] <> '\'
   THEN XRDPath := XRDPath + '\';

XRDPath := StUpCase(XRDPath);

TempPath := copy(XRDPath, 1, length(XRDPath) - 1);

writeln('WARNING!!  You are about to remove the following directory');
writeln('           (and delete all files and subdirectories under it):');
writeln('           '#16' ', TempPath, ' ', #17);
write('Continue (Y/N)? ');

REPEAT
c := upcase(readkey);
IF c = #0 THEN
   BEGIN
   c := readkey;
   c := #255;
   END;
UNTIL c in ['Y', 'N'];
writeln(c);
writeln;

IF c = 'N' THEN halt(3);
END;

{*************************************************************************
**}

PROCEDURE DeleteAllFilesInDir(DirName : PathStr);
VAR
   s : searchrec;
BEGIN
FindFirst(DirName + '*.*', AnyFile, s);
WHILE DosError = 0 DO
      BEGIN
      IF (s.Attr <> Directory) AND
         (s.name <> '.') AND
         (s.name <> '..')
         THEN BEGIN
              gotoxy(1, wherey);
              clreol;
              write('Deleting: ', DirName + s.name);
              Assign(f, DirName + s.name);
              erase(f);
              IF IOResult <> 0 THEN
                 BEGIN
                 SetFAttr(f, Archive);
                 erase(f);
                 IF IOResult <> 0 THEN
                   BEGIN
                   gotoxy(1, wherey);
                   clreol;
                   writeln('Error: unable to delete ', DirName + s.name);
                   END;
                 END;
              END
         ELSE IF (s.Attr = Directory) AND
                 (s.name <> '.') AND
                 (s.name <> '..')
                 THEN DeleteAllFilesInDir(DirName + s.name + '\');
      FindNext(s);
      END;

IF (length(DirName) > 1) AND
   NOT ((length(DirName) = 3) AND (DirName[3] = '\')) THEN
   BEGIN
   gotoxy(1, wherey);
   clreol;
   write('Removing: ', copy(DirName, 1, length(DirName) - 1));

   rmdir(copy(DirName, 1, length(DirName) - 1));

   IF IOResult <> 0 THEN
      BEGIN
      gotoxy(1, wherey);
      clreol;
      writeln('Error: unable to remove ', copy(DirName, 1, length(DirName)
- 1));
      END;
   END;
END;

{*************************************************************************
**}

BEGIN
Init;

DeleteAllFilesInDir(XRDPath);

gotoxy(1, wherey);
clreol;
writeln('Done.');
writeln;
END.


[Back to FILES SWAG index]  [Back to Main SWAG index]  [Original]