![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Удаление непустого каталога вместе с подкаталогамиDelphi , Файловая система , Директории
Автор: Lipskiy { **** 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 Функция Delphi Следующий анализ функции:
Пример использования функции на конце показывает, как вызывать ее с желаемыми параметрами: Некоторые предложения по улучшению кода:
Удаление непустого каталога вместе с подкаталогами и файлами на языке Delphi. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: Директории ::
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |