FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
||||
|
||||
Gestionar archivos temporales que se abren con terceros programas
Hola a tod@s.
Desde mi programa, como desde tantos imagino, existe la opción de abrir informes con el visor PDF que tenga instalado el ordenador en cuestión. Para esto lo que hago es crear un archivo llamado "DOCUMENTO.PDF" en el directorio temporal de windows y lanzo el programa predeterminado que tenga para abrirlo. Esto lo hago con un nombre de documento genérico porque ahora mismo no se me ocurre cómo podría detectar que se ha cerrado el visor de pdf para poder borrarlo, de esta manera siempre se usa el mismo archivo y no se satura la carpeta temporal de windows. Ahora me encuentro con un cliente que quiere poder abrir varios documentos de forma simultanea y, claro, no se lo permite porque el anterior está en uso. ¿A alguien se le ocurre la forma de solucionar esto? porque en el momento en el que se abre el visor mi programa no se entera cuando se cierra para poder eliminar el documento temporal, si pudiera encontrar la forma crearía un documento distinto para cada exportación borrandolo posteriormente. Gracias y un saludo
__________________
Be water my friend. |
#2
|
||||
|
||||
En cierta ocasión me encontré con ese problema y buscando información encontré una forma de hacerlo que en principio me pareció un poco "bruta" y que iba a ser lento, pero una vez probado funcionó bien y rápido.
Se trata de crear un bucle y comprobar si ya existe, algo así como: Código:
for i=1 to 100 if not fileexists("documento"+inttostr(i)+".pdf") then begin tratarpdf(i) break/exists end; Código:
tratarpdf( i :int ) begin // aquí se crea, se abre y cuando termina se borra. end; |
#3
|
||||
|
||||
Cita:
Gracias Antonio pero no entiendo la idea. Yo genero un archivo llamado "ARCHIVO1.PDF", lanzo el visor PDF y ¿qué tendría que hacer? ¿un bucle intentando borrarlo hasta que lo permita? Saludos
__________________
Be water my friend. |
#4
|
|||
|
|||
No lo permite porque el anterior está en uso
Cita:
cuando el usuario termine de ver el pdf borra el archivo o usas un proceso en batch para borrar todos los df en la carpeta en la noche |
#5
|
||||
|
||||
En "TratarPDF" se ejecuta una llamada para abrirlo y se espera a que lo cierre.
Una vez devuelto el control al programa delphi, se borrar el pdf. Código:
TratarPDF( i ) RunAndWaitShell( ficheropdf ... ) // Creo que tienes también en tu código la función para ejecutar y esperar a que termine borrar ficheropdf end;
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código Únete al grupo Teaming clubdelphi | Colabora mediante Paypal Última edición por Casimiro Notevi fecha: 20-08-2018 a las 16:28:14. |
#6
|
||||
|
||||
Aunque si lo que se quiere es que abra múltiples pdfs "independientes" y los tenga abierto cuanto quiera y seguir trabajando con el programa y "pasando" totalmente de los pdf abiertos, lo mismo puede ser una solución el crear una lista donde se van añadiendo los nombres de los pdfs abiertos y cada cierto tiempo intentar borrarlos. Si están en uso dará error y en caso contrario se borrarán.
También sin listas ni nada, a lo bruto, ejecutar el bucle e intentar borrar los que estén "libres". Código:
procedure timercadaxminutos for i=1 to 100 try borrar( 'documento.'+i+'.pdf' catch end end |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Gestionar archivos adjuntos | Delphitest | Varios | 6 | 22-12-2014 21:20:43 |
Archivos Temporales al usar un Query | mrmanuel | Conexión con bases de datos | 3 | 05-09-2005 18:33:42 |
Archivos temporales generados por TQuerys | Balda | Conexión con bases de datos | 0 | 14-04-2005 14:18:29 |
Como Creo Archivos Temporales en un programa hecho en red | jorge restrepo | Firebird e Interbase | 3 | 23-12-2003 18:02:23 |
|