Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Общие вопросы > как разблокировать хендл открытого файла ? |
Автор: Syberex 27.1.2007, 10:21 |
проблемка такая, необходимо разблокировать хендл открытого фала, а потом удалить файл или переименовать, переместить, как это сделать? |
Автор: Alexey_2007 27.1.2007, 10:32 | ||||||
Если файл открыт другим процессом, то простого открытого способа перетянуть его себе я не знаю. Зато! Есть способ поометить его например на удаление после перезагрузки компьютера, и при желании - эту перезагрузку вызвать.
Пометили на удаление... все ОК вроде... Добавлено @ 10:34 Перезагрузить можно либо так
либо так
Например. |
Автор: Syberex 27.1.2007, 11:19 |
Ну спасибки, ну перезагрузку не очень хочется. есть програмка http://ccollomb.free.fr/unlocker/unlocker1.8.1.exe , которая позволяет разбокировать хендлы, но думаю это не сложно с++ сделать, но вот как ? |
Автор: W4FhLF 27.1.2007, 11:38 |
Хэндлы не бывают заблокированные или не заблокированные... А работа с занятыми файлами обсуждалась не раз и были приведены рабочие примеры. Сходи на wasm.ru там вообще этой теме отдельная статья посвящена, 3 способа рассматривается и как раз на С++. |
Автор: Syberex 27.1.2007, 12:09 | ||
typedef struct _SYSTEM_HANDLE { ULONG uIdProcess; UCHAR ObjectType; UCHAR Flags; USHORT Handle; POBJECT pObject; ACCESS_MASK GrantedAccess; } SYSTEM_HANDLE, *PSYSTEM_HANDLE; вот эту штуку не компилит , какую инклюду включить system.h не рулит ![]() |
Автор: Любитель 27.1.2007, 13:50 |
Syberex, пиши подробней - на что ругается. Насчёт инклюдов - поставь windows.h. Или winnt.h + windefs.h, но первое надёжней ![]() |
Автор: Syberex 27.1.2007, 13:53 |
включил эти файлы #include "ntdll.h" #include "ntstatus.h" но в ntdll.h при компиляции пишит ошибку , что макрос не правильный строчка 3310 , макрос #define RtlLargeIntegerLessThanZero($a) (($a).HighPart < 0) и что тут не правильно ? ![]() |