| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > разблокировать файл |
| Автор: jimbo 24.11.2009, 19:57 |
| Привет всем. почитал форум но так и не нашел ответ на вопрос Есть файл. Есть процесс. Один хендл пишет в файл. Сам хендл нам не дан, используем функцию сторонней библиотеки Второй хендл пытается писать в файл, но он блокирован Как разблокировать файл чтобы суметь прочитать данные? |
| Автор: siew 25.11.2009, 09:37 |
| Насколько я понимаю, то пока у тебя файл открыт грубо говоря одним хэндлом (всё равно для записи или для чтения) то другим хэндлом ты не подступишься к файлу. Сначало нужно закрыть тот первый а потом открывать файл для второго хэндла. P.s. пытался писать на твоём языке =) |
| Автор: jimbo 25.11.2009, 11:06 | ||||||||
да это понятно. есть функция вида
есть функции записи в этот файл
все функции - публичные функции класса. код мы не видим. реализация записи в файл тоже скрыта. и мой код вида:
и собственно hFile==INVALID_HANDLE_VALUE. GetLastError выдает 32 The process cannot access the file because it is being used by another process. ERROR_SHARING_VIOLATION мой вопрос, как закрыть хендл принудительно и открыть моим кодом? Или это невозможно? |
| Автор: Alek86 25.11.2009, 12:38 |
| это не невозможно, но трудно в общем случае, думаю, тебе нужно просканировать всю систему на хендлы на этот файл да и некрасиво это как-то может проще дождаться, пока файл не разблокируется? |
| Автор: siew 25.11.2009, 14:43 |
| Я такого мнения, что знания хэндла открытого файла много не даст, так как он относиться к адресному пространству того процесса который его открыл. А вот внедрится в это адресное пространство и осторожно закрыть хэндл может и сработать. Для внедрения использовать ловушку. А закрыть можно по какому-нить событию, которое можно и самому создать. А после того как этот хэндл будет закрыт, то можно уже и своим процессом открывать. Чё на это скажете? |
| Автор: jimbo 26.11.2009, 12:25 | ||||||
спасибо за ответы.
Как это сделать? хотя бы название функции, я просто не в курсе вообще.
процесс один. хендла нет. или как закрыть все хендлы, принадлежащие определенному файлу?
Нет, не вариант. моя программа по команде извне, обязана предоставить файл. а отправить его я не могу, потому что не открывается он. И я точно знаю, что файл не разблокируется. функции написаны так, что файл захвачен монопольно. |