Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> разблокировать файл 
:(
    Опции темы
jimbo
Дата 24.11.2009, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 18.6.2009
Где: Южно-Сахалинск

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



Привет всем.

почитал форум но так и не нашел ответ на вопрос


Есть файл.
Есть процесс.

Один хендл пишет в файл. Сам хендл нам не дан, используем функцию сторонней библиотеки

Второй хендл пытается писать в файл, но он блокирован

Как разблокировать файл чтобы суметь прочитать данные? 
--------------------
Я не играю в шахматы - в шахматах я борюсь. А.А.Алехин
PM MAIL WWW   Вверх
siew
Дата 25.11.2009, 09:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 17.11.2009

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



Насколько я понимаю, то пока у тебя файл открыт грубо говоря одним хэндлом (всё равно для записи или для чтения) то другим хэндлом ты не подступишься к файлу. Сначало нужно закрыть тот первый а потом открывать файл для второго хэндла.
P.s. пытался писать на твоём языке =)

Это сообщение отредактировал(а) siew - 25.11.2009, 09:37
PM MAIL   Вверх
jimbo
Дата 25.11.2009, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 18.6.2009
Где: Южно-Сахалинск

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



Цитата

Насколько я понимаю, то пока у тебя файл открыт грубо говоря одним хэндлом (всё равно для записи или для чтения) то другим хэндлом ты не подступишься к файлу


да это понятно.


есть функция вида


Код

int open(char* filename);


есть функции записи в этот файл

Код

int write(char* message);


все функции - публичные функции класса. код мы не видим. реализация записи в файл тоже скрыта.


и мой код вида:
Код

hFile = CreateFile(RegisterGetPath(),GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
if(hFile!=INVALID_HANDLE_VALUE)


и собственно hFile==INVALID_HANDLE_VALUE. GetLastError выдает 
32 The process cannot access the file because it is being used by another process.  ERROR_SHARING_VIOLATION 

мой вопрос, как закрыть хендл принудительно и открыть моим кодом? Или это невозможно?
--------------------
Я не играю в шахматы - в шахматах я борюсь. А.А.Алехин
PM MAIL WWW   Вверх
Alek86
Дата 25.11.2009, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 21
Всего: 25



это не невозможно, но трудно
в общем случае, думаю, тебе нужно просканировать всю систему на хендлы на этот файл
да и некрасиво это как-то

может проще дождаться, пока файл не разблокируется?


--------------------
user posted image    user posted image
PM MAIL   Вверх
siew
Дата 25.11.2009, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 17.11.2009

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



Я такого мнения, что знания хэндла открытого файла много не даст, так как он относиться к адресному пространству того процесса который его открыл. А вот внедрится в это адресное пространство и осторожно закрыть хэндл может и сработать. Для внедрения использовать ловушку. А закрыть можно по какому-нить событию, которое можно и самому создать. А после того как этот хэндл будет закрыт, то можно уже и своим процессом открывать.
Чё на это скажете? 
PM MAIL   Вверх
jimbo
Дата 26.11.2009, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 18.6.2009
Где: Южно-Сахалинск

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



спасибо за ответы.

Цитата

думаю, тебе нужно просканировать всю систему на хендлы на этот файл


Как это сделать? хотя бы название функции, я просто не в курсе вообще.

Цитата

А вот внедрится в это адресное пространство и осторожно закрыть хэндл может и сработать


процесс один. хендла нет. или как закрыть все хендлы, принадлежащие определенному файлу?

Цитата

может проще дождаться, пока файл не разблокируется? 


Нет, не вариант. моя программа по команде извне, обязана предоставить файл. а отправить его я не могу, потому что не открывается он. И я точно знаю, что файл не разблокируется. функции написаны так, что файл захвачен монопольно.

Это сообщение отредактировал(а) jimbo - 26.11.2009, 14:21
--------------------
Я не играю в шахматы - в шахматах я борюсь. А.А.Алехин
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

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


 




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


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

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