|
|
Регистрация | << Правила форума >> | 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); |