![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| jimbo |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 180 Регистрация: 18.6.2009 Где: Южно-Сахалинск Репутация: нет Всего: нет |
Привет всем.
почитал форум но так и не нашел ответ на вопрос Есть файл. Есть процесс. Один хендл пишет в файл. Сам хендл нам не дан, используем функцию сторонней библиотеки Второй хендл пытается писать в файл, но он блокирован Как разблокировать файл чтобы суметь прочитать данные? --------------------
Я не играю в шахматы - в шахматах я борюсь. А.А.Алехин |
|||
|
||||
| siew |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 17.11.2009 Репутация: нет Всего: нет |
Насколько я понимаю, то пока у тебя файл открыт грубо говоря одним хэндлом (всё равно для записи или для чтения) то другим хэндлом ты не подступишься к файлу. Сначало нужно закрыть тот первый а потом открывать файл для второго хэндла.
P.s. пытался писать на твоём языке =) Это сообщение отредактировал(а) siew - 25.11.2009, 09:37 |
|||
|
||||
| jimbo |
|
||||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 180 Регистрация: 18.6.2009 Где: Южно-Сахалинск Репутация: нет Всего: нет |
да это понятно. есть функция вида
есть функции записи в этот файл
все функции - публичные функции класса. код мы не видим. реализация записи в файл тоже скрыта. и мой код вида:
и собственно hFile==INVALID_HANDLE_VALUE. GetLastError выдает 32 The process cannot access the file because it is being used by another process. ERROR_SHARING_VIOLATION мой вопрос, как закрыть хендл принудительно и открыть моим кодом? Или это невозможно? --------------------
Я не играю в шахматы - в шахматах я борюсь. А.А.Алехин |
||||||||
|
|||||||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
это не невозможно, но трудно
в общем случае, думаю, тебе нужно просканировать всю систему на хендлы на этот файл да и некрасиво это как-то может проще дождаться, пока файл не разблокируется? |
|||
|
||||
| siew |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 17.11.2009 Репутация: нет Всего: нет |
Я такого мнения, что знания хэндла открытого файла много не даст, так как он относиться к адресному пространству того процесса который его открыл. А вот внедрится в это адресное пространство и осторожно закрыть хэндл может и сработать. Для внедрения использовать ловушку. А закрыть можно по какому-нить событию, которое можно и самому создать. А после того как этот хэндл будет закрыт, то можно уже и своим процессом открывать.
Чё на это скажете? |
|||
|
||||
| jimbo |
|
||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 180 Регистрация: 18.6.2009 Где: Южно-Сахалинск Репутация: нет Всего: нет |
спасибо за ответы.
Как это сделать? хотя бы название функции, я просто не в курсе вообще.
процесс один. хендла нет. или как закрыть все хендлы, принадлежащие определенному файлу?
Нет, не вариант. моя программа по команде извне, обязана предоставить файл. а отправить его я не могу, потому что не открывается он. И я точно знаю, что файл не разблокируется. функции написаны так, что файл захвачен монопольно. Это сообщение отредактировал(а) jimbo - 26.11.2009, 14:21 --------------------
Я не играю в шахматы - в шахматах я борюсь. А.А.Алехин |
||||||
|
|||||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |