25.08.2005, 11:08 | #1 |
Участник
|
Помогите с удалением файла!
Аксапта сохраняет картинку из базы во временный файл который потом не удаляет. Нужно сделать так чтобы Аксапта удаляла картинку после просмотра из временной директории TEMP.
Есть следующий алгоритм для просмотра картинок: PHP код:
|
|
25.08.2005, 11:24 | #2 |
Участник
|
Вопрос с каким-то подвохом?
А то ответ слишком прост: winAPI::deleteFile(fileName) Ну разве что WinAPI::shellExecute ... надо запускать в синхронном режиме, чтоб ждало закрытия если delete писать сразу после, но это не очень удобно, тогда нужно delete делать до save и смириться с тем, что файл будет болтаться на диске до следующего открытия ... Можно смягчить ситуацию некой очистительной процедурой при запуске клиента, например. С уваженим, itfs. |
|
25.08.2005, 13:49 | #3 |
Участник
|
Я пробовал эту функцию но она удаляет файл раньше чем его отрывает просмоторщик.
winAPI::deleteFile(fileName) Может какое нибудь ожидание ставить? |
|
25.08.2005, 13:51 | #4 |
Дмитрий Ерин
|
2 Hidden
А почему вы приняли решение просматривать картинку внешней программой?
Может быть, проще поместить ее на Аксаптовскую форму?
__________________
|
|
25.08.2005, 14:43 | #5 |
Участник
|
Фунция ShellExecute запускает не сам файл на исполнение, а лишь передает Windows Shell команду на его запуск. При этом она возвращается после передачи управления в функцию WinMain процесса. А загрузка файла в программу происходит намного позже этого момента. Так что вы успеваете его удалить задолго до этого.
Запустить ShellExecute в синхронном режиме нельзя, так как она не возвращает Handle запущенного процесса. Для этого можно использовать либо ShellExecuteEx, либо CreateProcess, а дальше ч-з WaitForSingleObject с параметром INFINITE ждать завершения процесса и только после этого удалять файл. Но при этом, если не запускать обработку в отдельном Thread'е, то Axapta у вас не будет отвечать на запросы пока не закроете это приложение. Можно повесить это дело на таймер и проверять с немедленным возвратом из функции WaitForSingleObject с определенной периодичностью и только после закрытия процесса удалять файл. Ну а в общем зачем такие сложности, если проще показать картинку в Axapte? |
|
25.08.2005, 15:01 | #6 |
Участник
|
|
|
25.08.2005, 15:32 | #7 |
Участник
|
А как показать картинку в Аксапте? Она tif умеет открывать и печатать, и zoom делать?
|
|
25.08.2005, 16:21 | #8 |
Участник
|
Цитата:
Изначально опубликовано Hidden
А как показать картинку в Аксапте? Она tif умеет открывать и печатать, и zoom делать? 1. добавить запись с типом Файл. 2. Указать файл, нажать ОК 3. включить галочку Показать файл Документооброт умеет хранить файлы в базе, в каталоге на сервере, в исходном месте. Документооборот правильно работает в трехуровневой конфигурации. Юзайте стандартный функционал. |
|
25.08.2005, 19:13 | #9 |
Участник
|
У меня двухуровневая конфигурация. У меня конкретный вопрос, как удалять файлы?
|
|
25.08.2005, 20:26 | #10 |
Участник
|
Если у вас Win2000 или XP можно использовать тот же метод shellExecute таким образом
PHP код:
|
|
26.08.2005, 16:51 | #11 |
Участник
|
Я думаю сделать временную таблицу в которую писать путь к удаляемым файлам. потом эти файлы при закрытии формы удалять.
|
|
26.08.2005, 16:59 | #12 |
Участник
|
Зря. А что будет, если забыть закрыть приложение с картинкой перед выходом?
AndyD предложил отличный вариант самоподтирания . Присоединяюсь. С уважением, itfs. |
|
26.08.2005, 17:04 | #13 |
Участник
|
|
|