Проблема с открытием файла
От: mikhail_k Россия  
Дата: 23.07.03 10:10
Оценка:
Возникла проблема:
Процесс A открыл файл для записи.
Процессу B необходимо открыть этот же файл для чтения.

Вызов hFile = CreateFile(filename, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL); в процессе
B возвращает INVALID_HANDLE_VALUE.

Может быть все дело с флагами SHARE ?
Заранее благодарен.
Re: Проблема с открытием файла
От: Vamp Россия  
Дата: 23.07.03 10:18
Оценка:
Вполне возможно.

_>Может быть все дело с флагами SHARE ?

_>Заранее благодарен.
Да здравствует мыло душистое и веревка пушистая.
Re: Проблема с открытием файла
От: Brick_1 Украина  
Дата: 23.07.03 11:38
Оценка:
Здравствуйте, mikhail_k, Вы писали:

_>Возникла проблема:

_>Процесс A открыл файл для записи.
_>Процессу B необходимо открыть этот же файл для чтения.

_>Вызов hFile = CreateFile(filename, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL); в процессе

_>B возвращает INVALID_HANDLE_VALUE.

_>Может быть все дело с флагами SHARE ?

_>Заранее благодарен.



_>Процесс A открыл файл для записи.

Покажи как?
С уважением!
Re: Проблема с открытием файла
От: SergH Россия  
Дата: 23.07.03 11:47
Оценка:
Здравствуйте, mikhail_k, Вы писали:

_>Может быть все дело с флагами SHARE ?


Почти уверен. Первый должен открывать с SHARE_READ, второй с SHARE_READ | SHARE_WRITE.
Делай что должно, и будь что будет
Re: Проблема с открытием файла
От: Brick_1 Украина  
Дата: 23.07.03 11:51
Оценка:
Здравствуйте, mikhail_k, Вы писали:

_>Возникла проблема:

_>Процесс A открыл файл для записи.
_>Процессу B необходимо открыть этот же файл для чтения.

_>Вызов hFile = CreateFile(filename, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL); в процессе

_>B возвращает INVALID_HANDLE_VALUE.

_>Может быть все дело с флагами SHARE ?

_>Заранее благодарен.


A)
CreateFile(filename, GENERIC_WRIRE, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);

B)
CreateFile(filename, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
Это если А закроет файл и не захочет больше открывать пока его не закроет B

или
CreateFile(filename, GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
Это если А закроет файл а потом захочет опять открыть пока его все еще читает И

Вроде так.
Re[2]: Проблема с открытием файла
От: Attila Россия  
Дата: 23.07.03 13:19
Оценка:
Здравствуйте, SergH, Вы писали:

SH>Почти уверен. Первый должен открывать с SHARE_READ, второй с SHARE_READ | SHARE_WRITE.


Кстати, по-моему, во втором случае вполне достаточно SHARE_WRITE, или я не прав?
Re[3]: Проблема с открытием файла
От: SergH Россия  
Дата: 23.07.03 13:22
Оценка:
Здравствуйте, Attila, Вы писали:

A>Кстати, по-моему, во втором случае вполне достаточно SHARE_WRITE, или я не прав?


Скорее всего ты прав. Хотя что-то мне в таком варианте не нравится.. Вот я и перестраховался.
Делай что должно, и будь что будет
Re[4]: Проблема с открытием файла
От: Attila Россия  
Дата: 23.07.03 13:34
Оценка:
Здравствуйте, SergH, Вы писали:

SH>Скорее всего ты прав. Хотя что-то мне в таком варианте не нравится.. Вот я и перестраховался.


У Рихтера про открытие файла интересно написано. Получается, что в твоем варианте файл еще можно открыть (правда, только для чтения), а в моем — нет...
Re: Проблема с открытием файла
От: mikhail_k Россия  
Дата: 24.07.03 12:10
Оценка:
Здравствуйте.

Проблему решил (дело было в FILE_SHARE_). Всем спасибо за помощь.
Re[2]: Проблема с открытием файла (Com порта)
От: shrek  
Дата: 21.12.03 15:03
Оценка:
Тут возникла схожая проблема, Однако вместо файла — ком порт.
создаю след образом:


    const char namefile[] = "COM1";
    

    HANDLE f1 = ::CreateFile(namefile, GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);

    if (f1 == INVALID_HANDLE_VALUE) {
        std::cout << ::GetLastError() << std::endl;
    }
    HANDLE f2 = ::CreateFile(namefile, GENERIC_READ, FILE_SHARE_WRITE|FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);

    if (f2 == INVALID_HANDLE_VALUE) {
        std::cout << ::GetLastError() << std::endl;
    }

второй хендл всё время обламывается — с ошибкой 5 (доступ запрещён).
Можно ли каким образом "разделить" хендл ком порта на 1 части?
Re[3]: Проблема с открытием файла (Com порта)
От: _low_level_hacker_  
Дата: 23.12.03 15:54
Оценка:
Здравствуйте, shrek, Вы писали:

S>Тут возникла схожая проблема, Однако вместо файла — ком порт.

S>создаю след образом:


S>
S>    const char namefile[] = "COM1";
    

S>    HANDLE f1 = ::CreateFile(namefile, GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);

S>    if (f1 == INVALID_HANDLE_VALUE) {
S>        std::cout << ::GetLastError() << std::endl;
S>    }
S>    HANDLE f2 = ::CreateFile(namefile, GENERIC_READ, FILE_SHARE_WRITE|FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);

S>    if (f2 == INVALID_HANDLE_VALUE) {
S>        std::cout << ::GetLastError() << std::endl;
S>    }

S>

S>второй хендл всё время обламывается — с ошибкой 5 (доступ запрещён).
S>Можно ли каким образом "разделить" хендл ком порта на 1 части?

Нет, не получится, да и не зачем это делать. Работай с Com по одному хендлу на запись и чтение,
можешь даже из разных потоков.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.