Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как удалить каталог через FileSystemObject? 
V
    Опции темы
Данкинг
Дата 14.11.2010, 02:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 9
Всего: 130



Процедура удаления каталога:
Код

procedure TForm1.FormCreate(Sender: TObject);
var fs:variant;
begin
 fs:=createoleobject('scripting.FileSystemObject');
 fs.deletefolder('i:\musor\test');
end;

При этом удаляются все файлы в каталоге, но сам он не удаляется, возникает OLE-ошибка. То же происходит при наличии в каталоге подкаталогов: файлы из подкаталогов удаляются, но сам подкаталог - нет с той же ошибкой. Вопрос: как удалить каталог полностью, со всеми файлами и подкаталогами? smile 


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
RomanEEP
Дата 14.11.2010, 09:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 424
Регистрация: 18.5.2006
Где: Коломна

Репутация: 5
Всего: 8



А так:
Код

fs.deletefolder('i:\musor\test', True);

PM MAIL   Вверх
ama_kid
Дата 14.11.2010, 09:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

Репутация: 15
Всего: 95



Данкинг, у меня все нормально удаляется. Ошибка возникает только в случае, если папка используется (соответственно и не может удалиться). Ну и какбэ используемую папку гарантированно удалить сложно, у меня получилось только в Корзину методом, описанным здесь, да и то только когда она перестает использоваться.

P.S. Ну а использовать второй параметр метода deleteFolder ты наверное пробовал.


--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
Данкинг
Дата 14.11.2010, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 9
Всего: 130



Цитата(ama_kid @  14.11.2010,  09:45 Найти цитируемый пост)
P.S. Ну а использовать второй параметр метода deleteFolder ты наверное пробовал. 

Сейчас попробовал - результат тот же. smile Папка вроде и не используется, а пример по ссылке - 
Код

WinExec('cmd.exe /C RD /q /s D:\dir', SW_HIDE);

Удаляет все файлы, оставляя каталоги.

Добавлено @ 14:12
Вообще да, видимо, где-то держится эта папка в программе, в общем, буду искать.


А если быть точным, то мне нужно удалить не саму папку, а всё, что есть в ней. Т.е. папка остаётся, но пустая.

Это сообщение отредактировал(а) Данкинг - 14.11.2010, 14:23


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Akella
Дата 14.11.2010, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



А Проводник удаляет папку?
PM MAIL   Вверх
Данкинг
Дата 14.11.2010, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 9
Всего: 130



Akella, разумеется, да и если просто удалить папку через fs.deletefolder (т.е. без того, что делает программа сначала - а она действительно лезет в этот каталог), то удаляется нормально. Поэтому, вероятно, намёк верный: в программе что-то папку держит, хотя я уже там закрыл всё, что можно (TDirectoryListBox и TFileListBox). Вечерком думаю попробовать сделать через 0пу: сначала удалить все файлы в данной папке, а затем уже ставшими пустыми подкаталоги через RemoveDir. Вдруг получится. smile 

Это сообщение отредактировал(а) Данкинг - 14.11.2010, 15:44


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
ama_kid
Дата 14.11.2010, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

Репутация: 15
Всего: 95



Цитата(Данкинг @  14.11.2010,  16:43 Найти цитируемый пост)
Вдруг получится.
Имхо те же яйца только в профиль.
Попробуй менять активную директорию перед удалением каким-нибудь ChDir



--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
Данкинг
Дата 14.11.2010, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 9
Всего: 130



Цитата(ama_kid @  14.11.2010,  15:53 Найти цитируемый пост)
Имхо те же яйца только в профиль.

Да, и правда...
Цитата(ama_kid @  14.11.2010,  15:53 Найти цитируемый пост)
Попробуй менять активную директорию перед удалением каким-нибудь ChDir

Аналогичный результат.




--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Данкинг
Дата 15.11.2010, 00:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 9
Всего: 130



В общем, извратился окончательно: нужные пути к каталогам сохраняются в .txt, и сделал отдельную консольную программку, которую надо будет запускать после работы основной и которая удалит каталоги согласно этому .txt. smile 

Это сообщение отредактировал(а) Данкинг - 15.11.2010, 00:22


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Keeper89
Дата 15.11.2010, 00:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 20
Всего: 58



Данкинг, в общем случае папка чем-то занята, т.е. какой-то процесс содержит хендл на эту папку (скорее всего твой собственный это и есть).
Посмотреть это можно с помощью утилиты Unlocker, разблокировать через нее же.


--------------------
PM MAIL WWW   Вверх
Keeper89
Дата 15.11.2010, 01:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 20
Всего: 58





--------------------
PM MAIL WWW   Вверх
Данкинг
Дата 15.11.2010, 02:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 9
Всего: 130



Keeper89, ну, запускать утилиты - это по сути то же самое, что и моя вторая консольная программка. smile 


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
ama_kid
Дата 15.11.2010, 07:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

Репутация: 15
Всего: 95



Цитата(Данкинг @  14.11.2010,  19:50 Найти цитируемый пост)
Аналогичный результат.
SetCurrentDir('C:\') (возможно, с последующей задержкой на 1с перед удалением) тоже не поможет?



--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
Данкинг
Дата 15.11.2010, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 9
Всего: 130



ama_kid, аналогично, даже с задержкой на 10 секунд. smile 


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
ama_kid
Дата 15.11.2010, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

Репутация: 15
Всего: 95



Данкинг, я бы на твоем месте последовательно повырезал бы (закомментировал) участки кода и посмотрел, после чего удаление становится возможным. Хотя, если тебя устраивает вариант с доп.консольной приблудой - то ок.


--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0598 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.