ПрограммированиеФорумОбщее

GetOpenFileName заметил странность за этой функцией.

Страницы: 1 2 Следующая »
#0
17:28, 27 июля 2011

Сохранил пример на съемный жесткий диск. И запустил этот пример на съемном жестком диске. Пример просто открывает диологовое окно где мы выбираем файл. Жмем ок и программа выходит. Так вот когда я сделал безопасное извлечение съемного жесткого диска. То win 7 написал что устройство занято. Я делаю выключение win 7. Комп гаснет. Я вытаскиваю съемный жесткий диск. И опять загружаю комп. Win 7 загрузилась и я опять вставляю съемный жесткий диск. Он определился я посмотрел папки и сделал безопасное извлечение съемного жесткого диска. Диск может быть извлечен пишет win 7. Я опять подключаю съемный жесткий диск и запускаю свою прогу. И сново при безопасном извлечении съемного жесткого диска выдает win 7 устройство занято. Тоесть я точно опредилил что проблема именно с GetOpenFileName. Потому что убрал ее из своей программы и запустил на съемном жестком диске. И съемный диск после завершения моей программы безопасно извлекся.
Что не так с GetOpenFileName? Может надо Close делать или флаги иные писать? Я больше кошусь на флаги.
Вот какие я флаги пишу OFN_EXPLORER or OFN_LONGNAMES or OFN_OVERWRITEPROMPT

#1
18:24, 27 июля 2011

Файл где выбираешь? После диалога выбора файла останется залоченой папка с выбраным файлом.

#2
18:38, 27 июля 2011

Файл выбираю на съемном диске. В той же папке где моя прога

#3
18:51, 27 июля 2011

Попробуй выбрать на другом диске )

#4
18:58, 27 июля 2011

Если я запустил свою прогу с съемного диска. Но выбрал путь на другой винт. То съемный диск извлекаеться безопасно !!!

#5
19:04, 27 июля 2011

Так что сделать чтобы при выборе файла на съемном диске , потом можно было съемный диск безопасно извлечь? Может еще раз вызвать GetOpenFileName с указателем на другой винчестер. И сразу закрыть програмно диалог. Вобще можно програмно отменить диалог (типа при выходе из программы само все закроеться)?

#6
19:40, 27 июля 2011

SetCurrentDirectory не помогает. GetOpenFileName  запоминает последнее место выбора. Как это изменить на нужный мне путь?

#7
21:14, 27 июля 2011

ronniko
> Жмем ок и программа выходит.
А ты уверен (по менеджеру задач) что твоё приложение не зависает в памяти после нажатия "ок", т.е. абсолютно корректно завершается ?
Встречал я как-то одну кривую прогу, процесс которой после завершения работы оставался висеть в памяти, приходилось вручную его удалять.
Попробуй так - при запуске приложения сделай GetCurrentDirectory, чтобы запомнить текущую папку процесса, затем
после каждого GetOpenFileName и соответствующих операций ставь её (папку) взад с помощью SetCurrentDirectory.

#8
21:32, 27 июля 2011

Hybernaculum прочти пост #6

#9
22:12, 27 июля 2011

ronniko
> SetCurrentDirectory не помогает
Обычно этого бывает достаточно, следовательно дело не только в SetCurrentDirectory.
Телепаты как обычно в отпуске, так что кидай сюда весь свой проект, будем смотреть где ты зафейлился.

#10
22:47, 27 июля 2011

ronniko
Попробуй флаг OFN_NOCHANGEDIR

#11
23:05, 27 июля 2011

Crazy Hamster
> ronniko
> Попробуй флаг OFN_NOCHANGEDIR
"This flag is ineffective for GetOpenFileName."
Пруфлинк

#12
0:10, 28 июля 2011

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

#13
0:26, 28 июля 2011

cranky
> вряд ли баг связан с использованием этой ф-ии
Эта функция 100% вызывает вышеописанный баг без принятия соответствующих мер по его устранению.
Но если причина не в этом, то значит
> зло затаилось где-то в другом месте кода

#14
1:18, 28 июля 2011

можно выкрутится, вызвав GetOpenFileName для какого нибудь системного файла Виндовс (так как он лежит не в съемном диске - если даже в нем то его извлеь нельзя будет) – после того как не используешь папку.

Страницы: 1 2 Следующая »
ПрограммированиеФорумОбщее

Тема в архиве.