![]() |
|
![]() ![]() ![]() |
|
AlexPro |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 157 Регистрация: 9.11.2005 Где: Санкт-Петербург Репутация: 3 Всего: 4 |
Задача следующая: в таблице базы данных хранятся данные файлов различных форматов (.doc, .xls, .jpg и т.д.) в blob-полях. Необходимо извлечь данные, открыть в соответствующем редакторе и, в случае изменения данных, сохранить их в базе. Манипуляции с базой затруднений не вызывают. Скажем, я извлекаю данные, сохраняю во временный файл и открываю через ShellExecute. Нужно отловить момент закрытия программы-редактора, а также, был ли файл изменен. Можно это сделать каким-нибудь кошерным способом?
|
|||
|
||||
volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 4 Всего: 85 |
Можно например так:
1. выделяем для этой цели отдельный поток. 2. сохраняем временный файл, запоминаем время последней модификации оного. 3. вызываем ShellExecuteEx (там есть hProcess) 4. ждем завершения по WaitForSingleObject(hProcess, INFINITE); 5. сверяем время последней модификации файла, если изменилось то обновляем базу. 6. завершаем поток. |
|||
|
||||
AlexPro |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 157 Регистрация: 9.11.2005 Где: Санкт-Петербург Репутация: 3 Всего: 4 |
volatile, спасибо за подсказку. Похоже, это то, что надо. Буду пробовать. Однако, чувствую нужду сначала пообщаться с товарищем Рихтером.
![]() |
|||
|
||||
AlexPro |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 157 Регистрация: 9.11.2005 Где: Санкт-Петербург Репутация: 3 Всего: 4 |
Реализовал (правда, пока без создания отдельного потока). Все прекрасно работает под XP. На 7-ке студия (2008-я SP1) стреляется без объяснения причин при повторном открытии файла (любого, не обязательно того же, что и в первом случае).
Проверил из-под VS2010 и VS2012. Замечательно работает. exe-шник, сгенерированный VS2008, тоже работает без проблем... Ну, будем считать проблемой совместимости VS2008 и Windows 7. |
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |