Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Удалить каталог со всем содержимым 2

Delphi , Файловая система , Директории

Удалить каталог со всем содержимым 2


function MyRemoveDir(sDir : string) : Boolean;
var
  iIndex: Integer;
  SearchRec: TSearchRec;
  sFileName: string;
begin
  Result := False;
  sDir := sDir + '\*.*';
  iIndex := FindFirst(sDir, faAnyFile, SearchRec);

  while iIndex = 0 do
  begin
    sFileName := ExtractFileDir(sDir)+'\'+SearchRec.name;
    if SearchRec.Attr = faDirectory then
    begin
      if (SearchRec.name <> '' ) and (SearchRec.name <> '.') and
      (SearchRec.name <> '..') then
        MyRemoveDir(sFileName);
    end
    else
    begin
      if SearchRec.Attr <> faArchive then
        FileSetAttr(sFileName, faArchive);
      if not DeleteFile(sFileName) then
        ShowMessage('Could NOT delete ' + sFileName);
    end;
    iIndex := FindNext(SearchRec);
  end;

  FindClose(SearchRec);
  RemoveDir(ExtractFileDir(sDir));
  Result := True;
end;

// ***************************** //
//           Пример:             //
// ***************************** //
if not MyRemoveDir('D:\myDir') then
  ShowMessage('Can NOT delete dir');

// Кстати, системные, скрытые и
// read-only файлы тоже будут удалены.

Приведенный код - функция Delphi под именем MyRemoveDir, которая удаляет целый каталог и все его содержимое. Функция принимает строковый параметр sDir, представляющий путь к каталогу, который нужно удалить.

Вот шаг за шагом, что функция делает:

  1. Она устанавливает булев переменную Result в значение False, которое будет обновлено в True, если удаление было успешным.
  2. Функция конвертирует входной путь к каталогу в поисковый паттерн, добавив к нему \*.*, что соответствует всем файлам и подкаталогам в указанном каталоге.
  3. Затем функция использует рутину FindFirst для поиска первого файла или каталога в указанном каталоге, который соответствует поисковому патерну.
  4. Если найденный элемент - это каталог (то есть его атрибут - faDirectory), функция вызывает себя рекурсивно с путем подкаталога как входным параметром, эффективно удаляя все файлы и подкаталоги в нем.
  5. Если найденный элемент не является каталогом, функция устанавливает его атрибут архива в faArchive, что делает его доступным для удаления (если он был ранее только для чтения). Затем она пытается удалить файл с помощью рутины DeleteFile.
  6. Если удаление не удается, функция отображает сообщение об ошибке, указывающее, что файл не может быть удален.
  7. Функция продолжает поиск и удаление файлов, пока не будет найдено больше совпадений.
  8. После обработки всех элементов в каталоге функция закрывает поисковый.handle с помощью FindClose, удаляет оригинальный каталог с помощью RemoveDir и устанавливает Result в True, указывая, что удаление было успешным.

Пример в конце кода демонстрирует, как использовать эту функцию, удаляя каталог под именем 'myDir', расположенный на диске 'D:' . Если удаление не удается по любому причин, отображается сообщение об ошибке.

В целом, этот код предоставляет robust решение для удаления каталогов и их содержимого, но может не быть подходящим для всех сценариев из-за своей рекурсивной природы и потенциальных проблем с системными файлами, скрытыми файлами или файлами только для чтения.

Альтернативные решения:

  • Вместо рекурсивного вызова функции вы можете использовать цикл для перебора подкаталогов и файлов в указанном каталоге, используя FindFirst и FindNext для обхода дерева каталогов.
  • Для безопасного обработки системных файлов, скрытых файлов или файлов только для чтения вы можете рассмотреть использование класса TFile Delphi и его методов для управления атрибутами и правами доступа к файлам.

Данная статья описывает функцию Delphi, которая удаляет каталог с содержимым, рекурсивно обрабатывая все подкаталоги и файлы.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Директории ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-01-29 03:00:28/0.0034379959106445/0