Delphi - объектно-ориентированный язык программирования, разработанный компанией Borland в 1995 году. Он основан на языке программирования Pascal, но имеет более расширенные возможности и добавлены новые функции.
Delphi является интегрированной средой разработки (IDE), которая позволяет разрабатывать программное обеспечение для различных платформ, включая Windows, macOS, Android и iOS. Delphi достигает многоплатформенности с помощью...
{ **** UBPFD *********** by delphibase.endimus.com ****
>> Удаление непустого каталога вместе с подкаталогами
Удаление подкаталогов рекурсивное - функция вызывает саму себя.
Описание назначения агрументов:
-DeleteAllFilesAndFolder - если TRUE то функцией будут предприняты
попытки для установки атрибута faArchive любому файлу или папке
перед его(её) удалением;
-StopIfNotAllDeleted - если TRUE то работа функции моментально
прекращается если возникла ошибка удаления хотя бы одного файла или папки;
-RemoveRoot - если TRUE, указывает на необходимость удаления корня.
Зависимости: FileCtrl, SysUtils
Автор: lipskiy, lipskiy@mail.ru, ICQ:51219290, Санкт-Петербург
Copyright: Собственное написание (lipskiy)
Дата: 26 апреля 2002 г.
***************************************************** }
function FullRemoveDir(Dir: string
; DeleteAllFilesAndFolders,
StopIfNotAllDeleted, RemoveRoot: boolean): Boolean;
var
i: Integer;
SRec: TSearchRec;
FN: string
;
begin
Result := False;
if
not
DirectoryExists(Dir) then
exit;
Result := True;
// Добавляем слэш в конце и задаем маску - "все файлы и директории"
Dir := IncludeTrailingBackslash(Dir);
i := FindFirst(Dir + '*', faAnyFile, SRec);
try
while
i = 0 do
begin
// Получаем полный путь к файлу или директорию
FN := Dir + SRec.Name;
// Если это директория
if
SRec.Attr = faDirectory then
begin
// Рекурсивный вызов этой же функции с ключом удаления корня
if
(SRec.Name <> '') and
(SRec.Name <> '.') and
(SRec.Name <> '..') then
begin
if
DeleteAllFilesAndFolders then
FileSetAttr(FN, faArchive);
Result := FullRemoveDir(FN, DeleteAllFilesAndFolders,
StopIfNotAllDeleted, True);
if
not
Result and
StopIfNotAllDeleted then
exit;
end
;
end
else
// Иначе удаляем файл
begin
if
DeleteAllFilesAndFolders then
FileSetAttr(FN, faArchive);
Result := SysUtils.DeleteFile(FN);
if
not
Result and
StopIfNotAllDeleted then
exit;
end
;
// Берем следующий файл или директорию
i := FindNext(SRec);
end
;
finally
SysUtils.FindClose(SRec);
end
;
if
not
Result then
exit;
if
RemoveRoot then
// Если необходимо удалить корень - удаляем
if
not
RemoveDir(Dir) then
Result := false;
end
;
Пример использования:
FullRemoveDir('C:a', true, true, true);
// Полное удаление папки C:a со всем её содержимым,
// и с последующим удалением самой c:a