Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 4 479

/ вопрос открыт /

Здравствуйте!
Помогите плиз! Почему мой код не удаляет вложеные папки? Ну и соответсвенно не удалит и гл. каталог, так как в нём будут уже файлы(пустые папки). Буду оч благодарен...

Приложение:
  1. procedure MyRemoveDir(st : string);
  2.  
  3. var
  4.  
  5. searchResult : TSearchRec;
  6.  
  7. begin
  8.  
  9. SetCurrentDir(st);
  10.  
  11. if FindFirst('*', faDirectory, searchResult) = 0 then
  12.  
  13. begin
  14.  
  15. repeat
  16.  
  17. if (searchResult.attr and faDirectory) = faDirectory
  18. then begin
  19.  
  20. if (searchResult.Name <> '') and
  21. (searchResult.Name <> '.') and
  22. (searchResult.Name <> '..') then
  23. MyRemoveDir(st + searchResult.Name + '');
  24.  
  25. end else deletefile(st + searchResult.Name);
  26.  
  27. until FindNext(searchResult) <> 0;
  28.  
  29. FindClose(searchResult);
  30.  
  31. RemoveDir(st);
  32.  
  33. end;
  34.  
  35. end;


Примечание #1 (1 августа 2010, 12:03):
Да, и выдаёт ошибку 32.

padonak Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: padonak (статус: Посетитель)
Вопрос отправлен: 1 августа 2010, 12:01
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Егор

Здравствуйте, padonak!

...
  SetCurrentDir(st);
...
  RemoveDir(st);
...

Цитата (padonak):

Почему мой код не удаляет вложенные папки?

Потому что идёт попытка удаления ТЕКУЩЕЙ папки. Текущую папку удалять нельзя - из неё надо предварительной выйти.

Ответ отправил: Егор (статус: 10-ый класс)
Время отправки: 1 августа 2010, 19:08
Оценка за ответ: 5

Комментарий к оценке: браво!!!

Мини-форум вопроса

Всего сообщений: 4; последнее сообщение — 1 августа 2010, 14:20; участников в обсуждении: 2.
padonak

padonak (статус: Посетитель), 1 августа 2010, 14:07 [#1]:

Мдя... неужели никто не может ответить? странно, вопрос вроде бы лёгкий )))

или все такие ленивые, что не могут 32 строчки кода перебрать?
Ерёмин А.А.

Ерёмин А.А. (статус: *Администратор), 1 августа 2010, 14:16 [#2]:

Хы... Ну просто ещё воскресенье, все хотят отдохнуть :-)

В инете куча функций для рекурсивного удаления, вот например:

{**Summary ======================================================
    NAME    :   DeleteFiles
    PARAMS  :   const Path, Mask : string; recursive : boolean
 
    RETURNS :   -
    PURPOSE :   delete several files with joker.
                Optional recursive = search in subdirectories.                
 
    EXAMPLE :   DeleteFiles ('c:\temp\', '*.txt', True);
    UPDATES :
 
    NOTES   :
    CODED   :   PT  15.10.96
  ===============================================================*}
procedure DeleteFiles (const Path, Mask : string; recursive : boolean);
var
  Result    : integer;
  SearchRec : TSearchRec;
begin
  Result := FindFirst(Path + Mask, faAnyFile - faDirectory, SearchRec);
  while Result = 0 do
  begin
    if not DeleteFile (Path + SearchRec.name) then
    begin
      FileSetAttr (Path + SearchRec.name, 0); { reset all flags }
      DeleteFile (Path + SearchRec.name);
    end;
    Result := FindNext(SearchRec);
  end;
  FindClose(SearchRec);
 
  if not recursive then
    exit;
 
  Result := FindFirst(Path + '*.*', faDirectory, SearchRec);
  while Result = 0 do
  begin
    if (SearchRec.name <> '.') and (SearchRec.name <> '..') then
    begin
      FileSetAttr (Path + SearchRec.name, faDirectory);
      DeleteFiles (Path + SearchRec.name + '\', Mask, TRUE);
      RmDir (Path + SearchRec.name);
    end;
    Result := FindNext(SearchRec);
  end;
  FindClose(SearchRec);
end;
padonak

padonak (статус: Посетитель), 1 августа 2010, 14:18 [#3]:

Ерёмин А.А.: я понимаю что куча! мне нужна моя... одно дело когда ты работаешь со своим кодом, и совсем другое, когда мало что понимаешь в куске кода, взятом из интернета...

свой код делал по подобному, тоже из интернета, но чисто так, взял идею, и с нуля написал... не люблю пользоваться чужим кодом, слишком не удобно потом редактировать и вносить изменения...
padonak

padonak (статус: Посетитель), 1 августа 2010, 14:20 [#4]:

там у меня всё работает, кроме удаления папок... причём если в переменную занести полный путь к папке('C:\Documents and Settings\Администратор\Рабочий стол\Новая папка\Новая папка\Новая папка') то всё удалится без проблем... вот поэтому и спрашиваю...

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:56
Выполнено за 0.03 сек.