| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Как удалить каталог через FileSystemObject? |
| Автор: Данкинг 14.11.2010, 02:22 | ||
Процедура удаления каталога:
При этом удаляются все файлы в каталоге, но сам он не удаляется, возникает OLE-ошибка. То же происходит при наличии в каталоге подкаталогов: файлы из подкаталогов удаляются, но сам подкаталог - нет с той же ошибкой. Вопрос: как удалить каталог полностью, со всеми файлами и подкаталогами? |
| Автор: RomanEEP 14.11.2010, 09:12 | ||
А так:
|
| Автор: ama_kid 14.11.2010, 09:45 |
| Данкинг, у меня все нормально удаляется. Ошибка возникает только в случае, если папка используется (соответственно и не может удалиться). Ну и какбэ используемую папку гарантированно удалить сложно, у меня получилось только в Корзину методом, описанным http://forum.vingrad.ru/topic-111949.html, да и то только когда она перестает использоваться. P.S. Ну а использовать второй параметр метода deleteFolder ты наверное пробовал. |
| Автор: Akella 14.11.2010, 14:28 |
| А Проводник удаляет папку? |
| Автор: Данкинг 14.11.2010, 15:43 |
| Akella, разумеется, да и если просто удалить папку через fs.deletefolder (т.е. без того, что делает программа сначала - а она действительно лезет в этот каталог), то удаляется нормально. Поэтому, вероятно, намёк верный: в программе что-то папку держит, хотя я уже там закрыл всё, что можно (TDirectoryListBox и TFileListBox). Вечерком думаю попробовать сделать через 0пу: сначала удалить все файлы в данной папке, а затем уже ставшими пустыми подкаталоги через RemoveDir. Вдруг получится. |
| Автор: ama_kid 14.11.2010, 15:53 |
| Имхо те же яйца только в профиль. Попробуй менять активную директорию перед удалением каким-нибудь ChDir |
| Автор: Данкинг 14.11.2010, 18:50 | ||
Да, и правда...
Аналогичный результат. |
| Автор: Данкинг 15.11.2010, 00:21 |
| В общем, извратился окончательно: нужные пути к каталогам сохраняются в .txt, и сделал отдельную консольную программку, которую надо будет запускать после работы основной и которая удалит каталоги согласно этому .txt. |
| Автор: Keeper89 15.11.2010, 00:55 |
| Данкинг, в общем случае папка чем-то занята, т.е. какой-то процесс содержит хендл на эту папку (скорее всего твой собственный это и есть). Посмотреть это можно с помощью утилиты http://ru.wikipedia.org/wiki/Unlocker, разблокировать через нее же. |
| Автор: Keeper89 15.11.2010, 01:32 |
| И еще: http://blog.delphi-jedi.net/2010/11/14/is-file-in-use/ |
| Автор: Данкинг 15.11.2010, 02:16 |
| Keeper89, ну, запускать утилиты - это по сути то же самое, что и моя вторая консольная программка. |
| Автор: ama_kid 15.11.2010, 07:58 |
| SetCurrentDir('C:\') (возможно, с последующей задержкой на 1с перед удалением) тоже не поможет? |
| Автор: Данкинг 15.11.2010, 11:58 |
| ama_kid, аналогично, даже с задержкой на 10 секунд. |
| Автор: ama_kid 15.11.2010, 12:05 |
| Данкинг, я бы на твоем месте последовательно повырезал бы (закомментировал) участки кода и посмотрел, после чего удаление становится возможным. Хотя, если тебя устраивает вариант с доп.консольной приблудой - то ок. |
| Автор: Данкинг 15.11.2010, 12:25 | ||
Я на работе ещё не тестил, но думаю, что всех всё устроит. |
| Автор: Keeper89 16.11.2010, 09:12 |
| Данкинг, я говорил про утилиту только чтобы посмотреть, кто держит папку. А дальше ищи что в коде или освобождай принудительно сам, как это делает анлокер. |