Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
12 / 11 / 2
Регистрация: 03.04.2016
Сообщений: 502
1

Как дождаться закрытия файла?

09.09.2016, 19:55. Показов 1986. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Допустим открываем файл, а потом закрываем file.close(); Или открываем для чтения ресурсов и закрываем FreeLibrary(hModule); Так вот На выполнение file.close(); или FreeLibrary(hModule); уходит какое то время, может даже десяток секунд. То есть файл не закрывается мгновенно. Если к примеру файл закрыть и тут же попробовать его удалить , то может произойти ошибка, так как фактически он закроется через несколько секунд. Можно конечно после file.close(); поставить Sleep();, но это какое то корявое решение. Как приостановить работу программы до фактического завершения, file.close();?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.09.2016, 19:55
Ответы с готовыми решениями:

Как дождаться закрытия файла другим процессом/потоком
Всем привет. Допустим известно имя файла. Необходимо: * найти его. * если его сейчас...

Отслеживание закрытия файла процессом, запущенным через CreateProcess
Доброго времени суток! Возникла нетривиальная(на мой взгляд) задачка: Открываем какой нибудь файл...

Функция ShellExecute, как дождаться окончания запускаемого приложения?
Запуск программы с помощью ShellExecute Есть два файла: Prog_1.exe(родительская программа) и...

Дождаться закрытия диалога
Один и тот же диалог используется в двух активити. Т.к. его реализация достаточно громоздка,...

9
4 / 4 / 5
Регистрация: 19.08.2016
Сообщений: 137
09.09.2016, 20:24 2
Всегда пользовался CloseHandle(hFile) и закрывалось мгновенно, ничего ждать не приходилось, даже сразу удалял. А так попробуй WaitForSingleObject().
0
11 / 11 / 9
Регистрация: 04.09.2016
Сообщений: 41
09.09.2016, 21:31 3
Цитата Сообщение от zombivadim Посмотреть сообщение
То есть файл не закрывается мгновенно.
ну раз не мгновенно, то придется тебе подождать. пока функция не закончит свою работу, управление не перейдет следующей инструкции. а пока дескриптор не закроется, файл удалить невозможно.
счетчик ссылок
0
0 / 0 / 1
Регистрация: 07.09.2016
Сообщений: 3
10.09.2016, 09:19 4
Найти причину, почему он не закрывается сразу, наверное открыли его с флагом "Не Удалять" и сами же удаляете, ну или что-то в этом роде.
Может дело и не в файле а в чем-то другом, например дебагер качает символы с сервера а кажется что тормозит код.
0
Ушел с форума
Эксперт С++
16473 / 7436 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
10.09.2016, 09:28 5
Цитата Сообщение от zombivadim Посмотреть сообщение
Как приостановить работу программы до фактического завершения, file.close();?
Я в таких ситуациях поступаю следующим образом: делаю DeleteFile в цикле с
маленькой задержкой. Если и после этого DeleteFile отказывает с соответствующим кодом,
тогда вызываю MoveFileEx с MOVEFILE_DELAY_UNTIL_REBOOT и перехожу к другим делам.

А ОС и правда иногда "держит" файл некоторое время, пусть и небольшое.
0
2835 / 1644 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
10.09.2016, 11:51 6
Цитата Сообщение от Убежденный Посмотреть сообщение
А ОС и правда иногда "держит" файл некоторое время, пусть и небольшое.
Это точно ОС? Бывало иногда, но я думал на антивирус.
0
Ушел с форума
Эксперт С++
16473 / 7436 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
10.09.2016, 19:39 7
Точно. Я такое поведение наблюдал много раз, в том числе и на
совершенно чистых тестовых системах, где кроме Windows ничего нет.
Задержка может быть очень маленькой, но она существует.
Файл после возврата из CloseHandle отпускается не сразу, поэтому
DeleteFile может и не сработать.
0
12 / 11 / 2
Регистрация: 03.04.2016
Сообщений: 502
12.09.2016, 21:06  [ТС] 8
Цитата Сообщение от Nell_core Посмотреть сообщение
А так попробуй WaitForSingleObject().
А что интересно, можно ли так отследить закрытие указателя?
0
Ушел с форума
Эксперт С++
16473 / 7436 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
13.09.2016, 08:09 9
Нет, нельзя.
1
12 / 11 / 2
Регистрация: 03.04.2016
Сообщений: 502
15.09.2016, 22:41  [ТС] 10
Somebody, Могу сказать что антивирус тоже может внести свою печальную лепту..
Моя программа прекрасно работала, но на компьютере клиента иногда выскакивала ошибка доступа после перемещения файла и затем попытке открыть его. Я перелопатил весь код что только не делал. В итоге оказалось что у него установлен
360 total security, после замены его на Kaspersky, все заработало...
0
15.09.2016, 22:41
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.09.2016, 22:41
Помогаю со студенческими работами здесь

Как дождаться загрузки XML файла
Как дождаться загрузки XML файла Вот пример........локально все работает а когда обращаюсь к...

Как дождаться появления определённого файла?
Как в bat файле дождаться появления определенного файла Вот в папку пришел файл с названием в...

Как дождаться открытия exe-файла и выйти из excel?
Нужно открыть программу, при запуске которой выходят сообщения, требующие клика мышью, после чего...

Как добавить в заголовок tabpages значок закрытия файла?
Как добавить в заголовок tabpages значок закрытия файла?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru