MODULE deldir; IMPORT Log, Files, HF := HostFiles, W := WinApi; Dr000VtkExit = 0; Dr000Vtk0002 = 2; Dr000Vtk0013 = 13; Dr000Vtk0008 = 8; VAR buf: ARRAY 512 OF SHORTCHAR; PROCEDURE RemDir(IN name: ARRAY OF CHAR; OUT deleted: BOOLEAN); BEGIN buf := SHORT(name); deleted := W.RemoveDirectory(buf) # 0; IF deleted THEN Log.Msg( "Удалёна п-ка: " + name); END; (* IF *) END RemDir; PROCEDURE RemFile(IN name: ARRAY OF CHAR; OUT deleted: BOOLEAN); BEGIN buf := SHORT(name); deleted := W.DeleteFile(buf) # 0; IF deleted THEN Log.Msg( "Удалён ф-л: " + name); END; (* IF *) END RemFile; PROCEDURE Test*(IN dir: ARRAY OF CHAR); VAR deleted: BOOLEAN; BEGIN DelDir(dir, deleted); IF deleted THEN Log.Msg("Удалена"); ELSE Log.Msg("Не удалена"); END; (* IF *) END Test; PROCEDURE DelDir(IN dir: ARRAY OF CHAR; OUT deleted: BOOLEAN); VAR subdirs: Files.LocInfo; files: Files.FileInfo; loc: Files.Locator; cf, cd, res: INTEGER; subdel: BOOLEAN; VAR Dr000Vtk: INTEGER; BEGIN Dr000Vtk := Dr000Vtk0002; WHILE Dr000Vtk # Dr000VtkExit DO CASE Dr000Vtk OF | Dr000Vtk0002: cf := 1; cd := 1; (* > 0 *) loc := Files.dir.This(dir); IF loc.res = 0 THEN files := Files.dir.FileList(loc); IF loc.res = 0 THEN cf := 0; WHILE files # NIL DO IF files.length <= 100*1024 THEN RemFile( loc(HF.Locator).path + "\" + files.name, subdel); IF ~(subdel) THEN INC(cf); END; (* IF *) ELSE INC(cf); END; (* IF *) files := files.next; END; (* WHILE *) Dr000Vtk := Dr000Vtk0013 ELSE Dr000Vtk := Dr000Vtk0013 END; (* IF *) ELSE Dr000Vtk := Dr000Vtk0008 END; (* IF *) | Dr000Vtk0013: subdirs := Files.dir.LocList(loc); IF loc.res = 0 THEN cd := 0; WHILE subdirs # NIL DO IF subdirs.name # "NO_DEL" THEN DelDir( loc(HF.Locator).path + "\" + subdirs.name, subdel); IF ~(subdel) THEN INC(cd); END; (* IF *) ELSE INC(cd); END; (* IF *) subdirs := subdirs.next; END; (* WHILE *) END; (* IF *) Dr000Vtk := Dr000Vtk0008 | Dr000Vtk0008: deleted := (cf = 0) & (cd = 0); IF deleted THEN RemDir( loc(HF.Locator).path, deleted); END; (* IF *) Dr000Vtk := Dr000VtkExit END (* CASE *) END (* WHILE *) END DelDir; END deldir.