| 
| 
 | Вопрос # 4 479/ вопрос открыт / | 
 |  Здравствуйте!Помогите плиз! Почему мой код не удаляет вложеные папки? Ну и соответсвенно не удалит и гл. каталог, так как в нём будут уже файлы(пустые папки). Буду оч благодарен...
 Приложение:Переключить в обычный режим   procedure MyRemoveDir(st : string); var   searchResult : TSearchRec;     begin         SetCurrentDir(st);           if FindFirst('*', faDirectory, searchResult) = 0 then             begin               repeat                   if (searchResult.attr and faDirectory) = faDirectory                    then begin                       if (searchResult.Name <> '') and                        (searchResult.Name <> '.') and                          (searchResult.Name <> '..') then                            MyRemoveDir(st + searchResult.Name + '');                       end else deletefile(st + searchResult.Name);               until FindNext(searchResult) <> 0;           FindClose(searchResult); RemoveDir(st);             end;     end;
Примечание #1 (1 августа 2010, 12:03): Да, и выдаёт ошибку 32. 
 
|  |   Вопрос задал: 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 (статус: Посетитель), 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 (статус: Посетитель), 1 августа 2010, 14:18 [#3]:Ерёмин А.А.: я понимаю что куча! мне нужна моя... одно дело когда ты работаешь со своим кодом, и совсем другое, когда мало что понимаешь в куске кода, взятом из интернета... 
 свой код делал по подобному, тоже из интернета, но чисто так, взял идею, и с нуля написал... не люблю пользоваться чужим кодом, слишком не удобно потом редактировать и вносить изменения...
 |  
|   | padonak (статус: Посетитель), 1 августа 2010, 14:20 [#4]:там у меня всё работает, кроме удаления папок... причём если в переменную занести полный путь к папке('C:\Documents and Settings\Администратор\Рабочий стол\Новая папка\Новая папка\Новая папка') то всё удалится без проблем... вот поэтому и спрашиваю... |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |