Код | 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
|
Добавлено @ 10:08
Код | function FullRemoveDir(Dir: string; //выбираем каталог для удаления DeleteAllFilesAndFolders,//Удалить все содержимое(файлы и директории) StopIfNotAllDeleted, //(остановиться, если невозможно удалить) RemoveRoot: boolean //удалить саму выбранную директорию ): Boolean;
|
|