Удаление всех файлов и папок
лаборатория тестов

Мне частенько требуется удалять все файлы из папок, содержащих вложения. Спросите зачем? Надо. Работа у меня такая. Сижу и целыми днями удаляю файлы. Так вот, к моему великому сожалению, сделать это статическим методом ^file:delete[] никак не получается (надеюсь в будущем PAF включит эту возможность). Пришлось написать свой статический метод по удалению файлов.

Работает он просто, вызываете метод с параметрами и он удаляет файлы и папки по заданному пути. Если задан параметр (достаточно чтобы он был не пустой), то удаление будет производится только в указанной папке, не трогая вложенных папок. Если не задан, то удалятся все вложенные файлы и папки.

Параметр шаблон задает маску (регулярное выражение) для удаления выбранного типа файлов (например: \.html). Да, чуть не забыл, если в папках после удаления отсутствуют файлы, то и папки тоже удаляются (если позволяет сервер).

Вызов статического метода так:

^delete_all[папка;шаблон;параметр]

Сам метод:

# $Id: files.p,v 1.0.1.0 2004/02/01 Eugene Spearance Exp $
########################################
# Удаление всех файлов и папок в текущем каталоге
#
# 0 - удаление завершено успешно
# 1 - каталог не найден по указанному пути
# 2 - файл не найден по указанному пути
# 3 - каталог не содержит файлов или папок
#
#####
@delete_all[path;mask;only][list]
^rem{ *** Проверяем существует ли папка *** }
^if(-d $path){

	^rem{ *** Получаем список файлов и папок *** }
	$list[^file:list[$path;$mask]]
	^if($list){
		^list.menu{
			^if(-f "${path}$list.name"){

				^rem{ *** Удаляем все файлы из папки, папки не удаляются *** }
				^file:delete[${path}$list.name]
			}{
				$result(2)
			}
		}
	}{
		$result(3)
	}

	^rem{ *** Если папка не пустая и нет признака only проверяем вложенные папки *** }
	^if(!def $only && $result != 3){

		^rem{ *** Проверяем что осталось в папке *** }
		$list[^file:list[$path]]
		^if($list){

			^rem{ *** Рекурсивно вызываем оператор удаления *** }
			^list.menu{^delete_all[${path}${list.name}/;$mask]}
		}
	}
	$result(0)
}{
	$result(1)
}
### End @delete_all
Powered by Parser 3 Eugene Spearance