Delphi предоставляет множество функций для операций с файлами, включая создание и удаление каталогов, установку текущего каталога, получение текущего каталога и т. д. Удаление каталога включает функцию (Function) RemoveDir и процедуру (PROcedure) RmDir, но они могут удалять только пустые каталоги и не могут удалять непустые каталоги. Чтобы удалить все дерево каталогов (DelTree), необходимо написать программу для удаления в нем подкаталогов и файлов.
Файлы в каталоге можно удалить, вызвав функцию DeleteFile, но специальные файлы (только для чтения, системные, скрытые и т. д.) не могут быть эффективно удалены. Атрибуты файлов должны быть изменены на обычные файлы, прежде чем их можно будет удалить. Вы можете использовать функцию FileSetAttr для изменения атрибутов файла. Здесь атрибутам специального файла присваиваются обычные атрибуты файла (значение атрибута равно 0).
Учитывая, что древовидная структура каталогов наиболее подходит для рекурсивных методов, для реализации функции DelTree здесь используются рекурсивные алгоритмы. Ниже приводится конкретная процедура реализации.
//путь — путь к каталогу, который нужно удалить
//Возвращает True, если каталог успешно удален, в противном случае возвращает False
функция TForm1.Deltree (путь: строка): логическое значение;
вар
Поискрек: TSearchRec;
начинать
//Определяем, существует ли каталог
если DirectoryExists(путь), то
начинать
//Входим в каталог и удаляем в нем подкаталоги и файлы
старыйDir := GetCurrentDir;
ЧДир (путь);
//Находим все файлы в каталоге
FindFirst('??.??', faAnyFile, SearchRec);
повторить
//Изменяем атрибуты файла на обычные значения атрибутов
FileSetAttr(SearchRec.Name,0);
//Если это каталог, а не . и .., рекурсивно вызываем DelTree.
если(SearchRec.Attr и faDirectory > 0), то
начинать
если(SearchRec.Name[1]<>'.') тогда
если(не Deltree(SearchRec.Name)) тогда
перерыв;
конец
//Если это файл, удаляем его напрямую
еще
если(не УдалитьФайл(SearchRec.Name))то
перерыв ;
//Продолжаем поиск до конца
до (FindNext(SearchRec)<>0) ;
//Возвращаемся в родительский каталог и удаляем его
ЧДир('..');
Результат: = ReMoveDir(путь);
SetCurrentDir (старыйDir);
конец
еще
Результат: = Ложь;
конец ;
Эта программа была скомпилирована и запущена под Windows 98 и Delphi 4.0.