![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|
|
#1
|
|||
|
|||
|
Por mi parte, me doy más que satisfecho con la acogida y ayuda que me habeis prestado y doy por cerrado este asunto.
Estaba un poco agobiadete con este tema. Muchisimas gracias a todos ![]() Un cordial saludo |
|
#2
|
||||
|
||||
|
Lo mas optimo se supone que sería usar el gestlastline que estais comentando, pero en lugar de con un ttimer, con el evento del api de windows (el que te comenté en mi mensaje anterior) que se lanza sólo cuando se modifica el fichero.
Un saludo!
__________________
"la única iglesia que ilumina es la que arde" Anonimo |
|
#3
|
|||
|
|||
|
Hola Julian, coincido contigo totalmente.
Solo me queda una duda, que es donde falla el procedimiento que he adaptado basado en la funcion getlastline, y es la forma en la que se está generando el archivo de log. Si al generar las líneas del archivo de log se hace un flush por cada línea generada, funciona OK, pero si el flush se hace cada ciertas líneas entonces no funciona bien. No se si este componente contemplaria este caso... Saludos. |
|
#4
|
||||
|
||||
|
Cita:
Pues yo entiendo que son dos cosas distintas: 1. Saber cuando determinado archivo *.log ha sido modificado. 2. leer la ultima(s) líneas Para 1 puedes usarse un timer o el api de windows, y creo que hemos quedadi que lo mas elegante y correcto es el api de win. Para 2 pues puedes echar mano de cualquier funcion de leer archivos que tenga el delphi, tal como indican algunos ejemplos que nos han puesto en este mismo hilo. Lo que puedes hacer es poner aquí el cóodigo que te da error a ver que tal, pues con eso del flush no entiendo muy bien que es lo que te falla. Un saludo!
__________________
"la única iglesia que ilumina es la que arde" Anonimo |
|
#5
|
|||
|
|||
|
Hola Julián,
Correcto, son dos cosas. En cuanto a la primera mi duda es saber si tanto el timer como la api de windows se dan por enterados de que un archivo determinado se ha modificado o no desde que se lanza una instrucción write o solo se enteran en el momento en que se hace una instrucción flush del bufer a volcar a disco. (Esto tengo pendiente de probar en cuanto pueda). En lo referente al segundo punto, pues no hay ninguna duda todo está claro. En el mensaje #13 puse el codigo que estoy utilizadno, que no es que me de un error, sino que simplemente no funciona bien cuando desde el momento en que se hace un write para escribir el log si no se vuelca inmediatamente la línea a disco (con un flush) el código no se entera de que se ha enviado mas datos al archivo de log. Aqui te pongo un enlace a la función flush a ver si se entiende mejor lo que quiero comentar :-) : http://www.delphibasics.co.uk/RTL.asp?Name=Flush Cita:
|
|
#6
|
||||
|
||||
|
Cita:
http://www.delphibasics.co.uk/RTL.asp?Name=Flush Lee la descripcion de la ayuda. Medita sobre lo que dice. Alcanza la iluminación.
__________________
El malabarista. |
|
#7
|
||||
|
||||
|
Cita:
En realidad no mejoré la función, es la misma del mensaje #6 , sólo la integré a un TTimer para darle funcionalidad.¿ Probaste el código del mensaje #17 y no te resultó ? Funcionó correctamente en todas mis pruebas, obteniendo en mi equipo, promedios de aprox. 850 microsegundos para conseguir la última de 100000 líneas. Te adjunto el ejemplo debajo; la primera ejecución demorará un poco ya que creará un archivo con 100000 líneas de texto aleatorio en la carpeta donde lo ejecutes. En cuanto a capturar la escritura en tiempo real, Delphi posee el componente TShellChangeNotifier que informa sobre las modificaciones sucedidas en determinada carpeta y de forma análoga podes obtenerlas usando API mediante la funcion SHChangeNotifyRegister. Pero de ambos modos se notifica sobre un cambio del archivo como tál (creacion, borrado, etc) y no sobre una alteración en los datos internos del mismo. No quiero decir con esto que no es posible conseguir la información, sino que yo no pude encontrar el modo todavía. Julián ya te puso un enlace y la sugerencia de utilizar un hook. Tal vez tengas que encarar ese punto por ese lado. Saludos. ![]()
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... Última edición por ecfisa fecha: 10-04-2013 a las 20:18:35. |
|
#8
|
||||
|
||||
|
¡Eso que dice ecfisa es lo que yo decía: un hook!
Es que ya no me acordaba de esas cosas, pues hace como 8 años que no uso el puto Windows, ![]()
__________________
"la única iglesia que ilumina es la que arde" Anonimo |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
|