![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Задача - удалить каталог. В нем много подкаталогов. Все удаляется, кроме одной папки. Какая может быть причина. Файлы не системные.
Вот функции, которыми пытаюсь удалять: Код:
function DeleteDir(Dir: string): boolean;
var
Found: integer;
SearchRec: TSearchRec;
begin
result := false;
if IOResult <> 0 then
ChDir(Dir);
if IOResult <> 0 then
begin
ShowMessage('Не могу войти в каталог: ' + Dir);
exit;
end;
Found := FindFirst('*.*', faAnyFile, SearchRec);
while Found = 0 do
begin
if (SearchRec.name <> '.') and (SearchRec.name <> '..') then
if (SearchRec.Attr and faDirectory) <> 0 then
begin
if not DeleteDir(SearchRec.name) then
exit;
end
else
if not DeleteFile(SearchRec.name) then
begin
ShowMessage('Не могу удалить файл: ' + SearchRec.name+'!');
exit;
end;
Found := FindNext(SearchRec);
end;
FindClose(SearchRec);
ChDir('..');
RmDir(Dir);
result := IOResult = 0;
end;Код:
procedure RemoveAll(path: string);
var
sr: TSearchRec;
begin
if FindFirst(path + '\*.*', faAnyFile, sr) = 0 then
begin
repeat
if sr.Attr and faDirectory = 0 then
begin
DeleteFile(path + '\' + sr.name);
end
else
begin
if pos('.', sr.name) <= 0 then
RemoveAll(path + '\' + sr.name);
end;
until
FindNext(sr) <> 0;
end;
FindClose(sr);
RemoveDirectory(PChar(path));
end; |
|
#2
|
||||
|
||||
|
мне тоже лень разбираться в твоем коде, поэтому сделай так:
Код:
begin
WinExec('cmd /c "rmdir /s /q d:\Downloads\fordel"', SW_HIDE);
end; |
|
#3
|
|||
|
|||
|
а зачем эта проверка
if IOResult <> 0 then ChDir(Dir); |
|
#4
|
|||
|
|||
|
Цитата:
Нет желания использовать WinExec. Плохой тон это. |
|
#5
|
||||
|
||||
|
Цитата:
![]() Плохой тон это когда нет желания самому разобраться в своем же коде. |
|
#6
|
||||
|
||||
|
Код:
uses ShellAPI, var shfos: TSHFileOpStruct; begin ZeroMemory(@shfos, SizeOf(TSHFileOpStruct)); shfos.Wnd:=Handle; shfos.wFunc:=FO_DELETE; shfos.pFrom:='d:\Downloads\fordel'#0#0; shfos.fFlags:=FOF_SILENT or FOF_NOCONFIRMATION; SHFileOperation(shfos); end; |
| Этот пользователь сказал Спасибо NumLock за это полезное сообщение: | ||
Redddd (02.08.2013)
| ||
|
#7
|
||||
|
||||
|
Цитата:
|
|
#8
|
|||
|
|||
|
Цитата:
Цитата:
Последний раз редактировалось M.A.D.M.A.N., 02.08.2013 в 00:36. |
|
#9
|
|||
|
|||
|
А всё-таки, зачем эта проверка?
if IOResult <> 0 then ChDir(Dir); |