Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.02.2022, 01:45   #1
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 643
По умолчанию Очистка папки

Процедура, которая удаляет все из папки:
Код:
Procedure ClearFolder(Dir:string);
var
  SearchRec: TSearchRec;
begin
  If DirectoryExists(Dir) then begin
    Dir := IncludeTrailingBackslash(Dir);
    if FindFirst(Dir+'*.*', faAnyFile, SearchRec) = 0 then
      repeat
        Application.ProcessMessages;
        If not(SearchRec.Name='.') and not(SearchRec.Name='..') then try
         if (SearchRec.Attr and faDirectory)=0 then DeleteFile(Dir + SearchRec.Name)
         Else RemoveDir(Dir + SearchRec.Name);
        except
        end;
      until FindNext(SearchRec)<>0;
    FindClose(SearchRec);
  End;
end;
Вопрос: оптимален ли этот код?
Kronos913 вне форума Ответить с цитированием
Старый 20.02.2022, 22:23   #2
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,591
По умолчанию

Он просто неработоспособен. В коде прослеживается желание удалять вложенные папки:
Код:
Else RemoveDir(Dir + SearchRec.Name);
Но удаляемая с помощью RemoveDir папка должна быть пуста. Полагаю, что в этом месте перед RemoveDir должен быть рекурсивный вызов: ClearFolder(Dir + SearchRec.Name);
Arigato вне форума Ответить с цитированием
Старый 21.02.2022, 14:00   #3
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 643
По умолчанию

А есть ли процедура, способная сразу удалить "полную" папку?
Просто я сколько не искал, такой не нашел
Kronos913 вне форума Ответить с цитированием
Старый 21.02.2022, 17:36   #4
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,591
По умолчанию

Нет, системе надо пометить место, занимаемое файлами, как свободное для использования. Без просмотра всего дерева каталогов это сделать невозможно.
Arigato вне форума Ответить с цитированием
Старый 22.02.2022, 01:50   #5
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,887
По умолчанию

Цитата:
Сообщение от Kronos913 Посмотреть сообщение
А есть ли процедура, способная сразу удалить "полную" папку?
Кстати. На всемирной помойке вы вполне сможете найти такую процедуру. Но если заглянете в её нутро, то увидите ту же самую реализацию. Т.е. сначала удаление всех файлов, и уж потом удаление самой папки.
northener вне форума Ответить с цитированием
Старый 24.02.2022, 01:36   #6
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 643
По умолчанию

Вот отредактированный код, вдруг кому надо будет

Код:
Procedure ClearFolder(Dir:string);
var
  SearchRec: TSearchRec;
begin
  If DirectoryExists(Dir) then begin
    Dir := IncludeTrailingBackslash(Dir);
    if FindFirst(Dir+'*.*', faAnyFile, SearchRec) = 0 then
      repeat
        Application.ProcessMessages;
        If not(SearchRec.Name='.') and not(SearchRec.Name='..') then try
          if (SearchRec.Attr and faDirectory)=0 then DeleteFile(Dir + SearchRec.Name)
          Else begin
            ClearFolder(Dir + SearchRec.Name);
            RemoveDir(Dir + SearchRec.Name);
          end;
        except
        end;
      until FindNext(SearchRec)<>0;
    FindClose(SearchRec);
  End;
end;
Kronos913 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
КАК ОТОБРАЗИТЬ ФАЙЛЫ И ПАПКИ С ФЛЕШКИ ДАЖЕ КОГДА В НАСТРОЙКАХ ПАПКИ СНЯТА ГАЛОЧКА СКРЫТЬ ЗАЩИЩЕННЫЕ ФАЙЛЫ adninistraotr Общие вопросы по программированию, компьютерный форум 1 12.12.2019 10:10
Очистка папки Windows в Win 8.1 ilim58 Windows 10 08.05.2016 22:14
Очистка папки из php-скрипта. Def@ult PHP 11 19.02.2015 12:21
Как открыть шаблон Word-a из папки в корневой папки программы :) flouwjke Общие вопросы Delphi 3 30.04.2012 00:25
Очистка папки Maktraher PHP 0 18.05.2010 19:48