|
Вопрос # 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\Администратор\Рабочий стол\Новая папка\Новая папка\Новая папка') то всё удалится без проблем... вот поэтому и спрашиваю...
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|