Autor |
Mensaje |
tincho
Analista Programador
Registrado: Noviembre 2014
Mensajes: 2565
Edad: 48 Ubicación:
|
Saber Si Un Archivo Esta Abierto
Hola, he estado trabajando con una clase que genera un archivo pdf, y luego el programa abre y muestra ese pdf.
El inconveniente con el que me tope es que cada pdf sera diferente y por lo tanto la clase que lo genera tardara a veces mas a veces menos, así que en el programa uso wait para definir un tiempo de espera prudencial antes de abrir el pdf para visualizarlo, y me gustaría que el tiempo de espera "wait" sea el menor posible, pero si configuro uno muy pequeño, cuando la generación del pdf tarde mucho se producira un error y si configuro un tiempo muy grande el programa parecerá lento.
Bueno, he usado Exist para ver si el fichero existe, pero esto no me sirve del todo porque este existe pero esta siendo modificado por la clase que genera el archivo.
así que si lo abro dará error.
Así que use Stat(/ruta/archivo.pdf).Size
Esta es la rudimentaria solución que encontré
w = 0
strPathPDF = "/rutacompleta/archivo.pdf"
Repeat
If Not Exist(strPathPDF) Then
Wait 0.1
Else
strStatSize1 = Stat(strPathPDF).Size
Wait 0.3 ' Espera de 0.3 segundos antes de tomar la segunda medición.
strStatSize2 = Stat(strPathPDF).Size
If strStatSize1 = strStatSize2 Then ' Si las dos mediciones son iguales se puede inferir que el archivo ya fue generado.
strCompiled = "ok"
Endif
Print Str(w) & " Tamaño instate 1: " & strStatSize1 & " Tamaño instate 2: " & strStatSize2
Inc w
Endif
Until strCompiled = "ok" ' Or w = 120 ' Por si algo falla le di un tiempo de finalización 120 * 0.3
Shell "atril " & strPathPDF
¿Existe una forma mejor de averiguar si el archivo ya se termino de generar?
Saludos.
|
#1 Martes, 08 Marzo 2016, 16:42 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
Re: Saber Si Un Archivo Esta Abierto
Sí. Añade a tu programa el modulo gb.inotify y utiliza la clase watch. Es precisamente para lo que quieres.
Se levanta un "vigilante" (observador ya estaba pillado) sobre el fichero y éste vigilante levanta un evento cada vez que el fichero es escrito, accedido, leído, cerrado, creado, etc. etc.
Yo lo uso y mola.
=================== No podemos regresar
|
#2 Martes, 08 Marzo 2016, 18:22 |
|
|
tincho
Analista Programador
Registrado: Noviembre 2014
Mensajes: 2565
Edad: 48 Ubicación:
|
Re: Saber Si Un Archivo Esta Abierto
Sí. Añade a tu programa el modulo gb.inotify y utiliza la clase watch.
Gracias crack. lo voy a probar a ver que tal va.
Saludos.
|
#3 Martes, 08 Marzo 2016, 19:19 |
|
|
jguardon
Administrador
Registrado: Septiembre 2009
Mensajes: 2708
Edad: 57 Ubicación: Granada
|
Re: Saber Si Un Archivo Esta Abierto
Sí. Añade a tu programa el modulo gb.inotify y utiliza la clase watch. Es precisamente para lo que quieres.
Se levanta un "vigilante" (observador ya estaba pillado) sobre el fichero y éste vigilante levanta un evento cada vez que el fichero es escrito, accedido, leído, cerrado, creado, etc. etc.
Yo lo uso y mola.
Qué "mákina", shordi
No le había prestado suficiente atención a esa clase. Parece extremadamente útil.
Saludos
=================== Jesús Guardón
Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".
"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
|
#4 Martes, 08 Marzo 2016, 21:19 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
Re: Saber Si Un Archivo Esta Abierto
Es obra de Tobi, el ínclito alemán de 20 años "que usa gambas por diversión". Cuánto talento hay por ahí... y qué viejo soy...
=================== No podemos regresar
|
#5 Martes, 08 Marzo 2016, 21:29 |
|
|
jguardon
Administrador
Registrado: Septiembre 2009
Mensajes: 2708
Edad: 57 Ubicación: Granada
|
Re: Saber Si Un Archivo Esta Abierto
Lo sé, lo sé... Y también lo de Tobi y su componente gb.inotify
Saludos
=================== Jesús Guardón
Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".
"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
|
#6 Martes, 08 Marzo 2016, 23:35 |
|
|
vuott
Analista Programador
Registrado: Agosto 2013
Mensajes: 2086
Edad: 60 Ubicación:
|
Re: Saber Si Un Archivo Esta Abierto
....trabajando con una clase que genera un archivo pdf
Hola tincho, querría saber cual es esta Clase y el su metodo que usaste para generar el file PDF.
|
#7 Martes, 08 Marzo 2016, 23:55 |
|
|
tincho
Analista Programador
Registrado: Noviembre 2014
Mensajes: 2565
Edad: 48 Ubicación:
|
Re: Saber Si Un Archivo Esta Abierto
Hola tincho, querría saber cual es esta Clase y el su metodo que usaste para generar el file PDF.
Es la clase classLaTeX de Julio. y los metodos que use son ResultadoConsultaDB, inicioPagina, finPagina, HojaApaisadaInicio, HojaApaisadaFin, compila etc. etc.
En el ejemplo de Julio y su video esta magistralmente explicado.
Julio:
Echale un ojo al adjunto a ver si te interesa incorporar los de los encabezados. La verdad me parece super interesante esta clase y de momento estoy comenzando a entender como usarla, pero le veo un futuro prometedor.
Saludos.
Descripción: |
ClassLaTeX con unas minimas modificaciones para manejar el visor de pdf en multiples ecritorios y los encabezados de las columnas. |
Descargar |
Nombre del archivo: |
ClassLaTex.class.zip |
Tamaño: |
4.46 KB |
Descargado: |
29 veces |
Descripción: |
ClassLaTeX con unas minimas modificaciones para manejar el visor de pdf en multiples ecritorios y los encabezados de las columnas. |
Descargar |
Nombre del archivo: |
ClassLaTex.class.zip |
Tamaño: |
4.46 KB |
Descargado: |
29 veces |
Descripción: |
ClassLaTeX con unas minimas modificaciones para manejar el visor de pdf en multiples ecritorios y los encabezados de las columnas. |
Descargar |
Nombre del archivo: |
ClassLaTex.class.zip |
Tamaño: |
4.46 KB |
Descargado: |
29 veces |
|
#8 Miercoles, 09 Marzo 2016, 00:16 |
|
|
vuott
Analista Programador
Registrado: Agosto 2013
Mensajes: 2086
Edad: 60 Ubicación:
|
Re: Saber Si Un Archivo Esta Abierto
tincho, mira que si la version del archivo PDF
version = Mid(File.Load("/ruta/del/archivo.pdf"), 6, 3)
< 1.3, el archivo termina con estos valores byte: 45 4F 46 0D 0A
= > 1.3, el archivo termina con estos valores byte: 45 4F 46 0A
.......
Y otra manera, si se pudiera interrogar el file-descriptor del archivo pdf...........
.
última edición por vuott el Jueves, 10 Marzo 2016, 01:52; editado 3 veces
|
#9 Miercoles, 09 Marzo 2016, 01:30 |
|
|
tincho
Analista Programador
Registrado: Noviembre 2014
Mensajes: 2565
Edad: 48 Ubicación:
|
Re: Saber Si Un Archivo Esta Abierto
Sí. Añade a tu programa el modulo gb.inotify y utiliza la clase watch
Shordi:
He intentado usar este componente pero no doy pie con bola. sigo con la opción inicial que ya funciona bien. pero por curuisidad me gustaria ver algun ejemplo practico de ese componente si es que tienes algo por ahí.
Saludos.
|
#10 Viernes, 11 Marzo 2016, 18:25 |
|
|
|