Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > RemoveDirectory: удалить "занятую" директорию


Автор: Alca 10.3.2011, 22:47
Удаляю директорию ф-ей ::RemoveDirectory:
Цитата

Процесс не может получить доступ к файлу, так как этот файл занят другим процессом

и следов. она не удаляется, как удалить?

Автор: volatile 11.3.2011, 00:40
Вероятно нужно сначала разблокировать файл. Есть такая программка унлокер, она это делает.
значит можно это сделать (правда не всегда у нее это получается).
В общем нужно копать МСДН в этом направлении.


Автор: bra1ny 12.3.2011, 15:00
Цитата(Alca @ 10.3.2011,  22:47)
Удаляю директорию ф-ей ::RemoveDirectory:
Цитата

Процесс не может получить доступ к файлу, так как этот файл занят другим процессом

и следов. она не удаляется, как удалить?

ответ простой закрыть/скопировать ее хэндл)
ZwQuerySystemInformation->ZwQueryInformationFile->DuplicateHandle и тд.

Тут Вас будет поджидать сюрприз с пайпами , делайте все это дело в отдельном потоке.

Автор: alexvs11 12.3.2011, 17:19
Цитата(bra1ny @  12.3.2011,  15:00 Найти цитируемый пост)
ответ простой закрыть/скопировать ее хэндл)ZwQuerySystemInformation->ZwQueryInformationFile->DuplicateHandle и тд.

и как должен работать DuplicateHandle
hSourceProcessHandle must have the PROCESS_DUP_HANDLE access right
hSourceHandle - For a list of objects whose handles can be duplicated
те у того процесса в security дб PROCESS_DUP_HANDLE, а файл должен быть открыт с правами на sharing
короч фантастика

Автор: bra1ny 12.3.2011, 18:43
да руссинович - это фантакстика smile 
Alca, 
а что Вы там закрываете.чтобы пример набросать ,  скажите.

Автор: Alca 12.3.2011, 19:47
Цитата

а что Вы там закрываете.чтобы пример набросать ,  скажите.

в директории остаються незакрытые хендлы, поэтому удаление не происходит

Автор: GremlinProg 13.3.2011, 21:47
Цитата(Alca @  11.3.2011,  00:47 Найти цитируемый пост)
она не удаляется, как удалить?

как вариант - дождаться освобождения файлов и удалить, например, так:
Код

::MoveFileEx( ..., NULL, MOVEFILE_DELAY_UNTIL_REBOOT );

Автор: Alca 14.3.2011, 10:40
Спасибо

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)