Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 20-03-2008
Lorena83 Lorena83 is offline
Registrado
 
Registrado: mar 2008
Posts: 4
Poder: 0
Lorena83 Va por buen camino
Capturar escritura a fichero de otra aplicación

Hola a todos !!

Quiero realizar una aplicación que analice ficheros log de texto plano en tiempo real de aplicaciones de terceros. El caso es que no quiero hacer que mi programa compruebe periódicamente el fichero log para comprobar si ha sufrido modificaciones sino que de alguna manera "se enganche" a él y detecte inmediatamente cuando se ha escrito en él y el contenido añadido sin tener que releer el fichero de texto desde el principio.

Alguien puede echarme una mano con alguna sugerencia.

Saludos.
Lorena
Responder Con Cita
  #2  
Antiguo 24-03-2008
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
Cita:
Empezado por Lorena83 Ver Mensaje
Hola a todos !!

Quiero realizar una aplicación que analice ficheros log de texto plano en tiempo real de aplicaciones de terceros. El caso es que no quiero hacer que mi programa compruebe periódicamente el fichero log para comprobar si ha sufrido modificaciones sino que de alguna manera "se enganche" a él y detecte inmediatamente cuando se ha escrito en él y el contenido añadido sin tener que releer el fichero de texto desde el principio.

Alguien puede echarme una mano con alguna sugerencia.

Saludos.
Lorena
Se me ocurre que puedes comprobar la fecha de modificación/escritura del archivo (API GetFileTime, parámetro lpLastWriteTime), al cambiar el mismo recien verificas los cambios en el contenido del archivo.

Saludos
Responder Con Cita
  #3  
Antiguo 25-03-2008
Lorena83 Lorena83 is offline
Registrado
 
Registrado: mar 2008
Posts: 4
Poder: 0
Lorena83 Va por buen camino
Ok, me parece una buena idea en cuanto me ahorro el examinar detalladamente el archivo para detectar posibles cambios (añadiduras), pero sigue siendo necesario tener un temporizador que compruebe periódicamente los cambios de la fecha de modificación. Y es que odio los temporizadores . Me suenan a programación cutre.

Existe alguna manera (callback creo que sería la denominación apropiada) de que el sistema notifique a mi aplicación el cambio del fichero que estoy monitorizando.

Un saludo
Responder Con Cita
  #4  
Antiguo 25-03-2008
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
Cita:
Empezado por Lorena83 Ver Mensaje
...Y es que odio los temporizadores . Me suenan a programación cutre...
Pues las herramientas que el S.O. pone a disponibilidad del desarrollador no debiesen ser "discriminadas" solo por un "sentimiento". A mi tampoco me agradaban los Timers, solo utilizaba hilos, pero ahora se que ambos tienen su lugar dado un determinado caso.

Cita:
Empezado por Lorena83 Ver Mensaje
...Existe alguna manera (callback creo que sería la denominación apropiada) de que el sistema notifique a mi aplicación el cambio del fichero que estoy monitorizando.
Puedes utilizar la API FindFirstChangeNotification con el parámetro FILE_NOTIFY_CHANGE_LAST_WRITE (dentro de un hilo), sobre la carpeta que contiene el archivo en cuestión. Luego realizar la verificación de última escritura sobre el archivo y la comprobación de contenido.

La última forma es hacer un hook a la API de escritura en el proceso que accede al archivo. Y algo mas global sería hacer un hook a nivel de Driver; pero ambos casos son mucho mas complicados.

Saludos
Responder Con Cita
  #5  
Antiguo 26-03-2008
Lorena83 Lorena83 is offline
Registrado
 
Registrado: mar 2008
Posts: 4
Poder: 0
Lorena83 Va por buen camino
Cita:
Pues las herramientas que el S.O. pone a disponibilidad del desarrollador no debiesen ser "discriminadas" solo por un "sentimiento". A mi tampoco me agradaban los Timers, solo utilizaba hilos, pero ahora se que ambos tienen su lugar dado un determinado caso.
Te pido disculpas si te he ofendido con mi manera de decir la cosas. En realidad al decir "programación cutre" quería decir que se trataba de una solución que no consideraba óptima ya que entiendo que de esa manera se produce un gasto inutil de recursos, si partimos de que el proceso lanzado por el temporizador se repite continuamente cuando seguramente no es preciso.

Cita:
Puedes utilizar la API FindFirstChangeNotification con el parámetro FILE_NOTIFY_CHANGE_LAST_WRITE (dentro de un hilo), sobre la carpeta que contiene el archivo en cuestión. Luego realizar la verificación de última escritura sobre el archivo y la comprobación de contenido.
Esta solución, en cambio, es mucho más cercana a lo que busco ya que es posible optimizar el consumo de recursos.

Muchas gracias por tu ayuda.
Responder Con Cita
  #6  
Antiguo 26-03-2008
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
Cita:
Empezado por Lorena83 Ver Mensaje
Te pido disculpas si te he ofendido con mi manera de decir la cosas...
Para nada Lorena83, el que talvez se expreso de una forma inadecuada fui yo y solo quise difundir un pensamiento (al igual que tu).

Cita:
Empezado por Lorena83 Ver Mensaje
Muchas gracias por tu ayuda.
Para servirte.
Responder Con Cita
  #7  
Antiguo 28-03-2008
Avatar de Black_Ocean
Black_Ocean Black_Ocean is offline
Miembro
 
Registrado: nov 2006
Posts: 128
Poder: 18
Black_Ocean Va por buen camino
Hola Lorena83.

Bueno... esto va para Delphi si es que estás programando con este lenguaje.

Mira... Hay un curioso componente que viene en Delphi 7 que se llama ShellChangeNotifier que pasa inadvertido por la mayoría de nosotros, ya que no viene documentado por Delphi y Borland nunca se ha referido en palabras o comentarios hacia este, Es como un componente para que uno lo empiece a descubrir. La razón, no lo se... Este componente se encuentra por defecto en la pestaña Samples del IDE de Delphi 7.

Así mismo nos cuenta y plantea nuestro amigo George Merriman de delphi.about.com http://delphi.about.com/od/vclusing/l/aa052403a.htm

Ahí encontrarás documentación y un ejemplo en código fuente.

Espero que sea lo que buscabas y planteabas

Cordiales saludos.

Última edición por Black_Ocean fecha: 28-03-2008 a las 05:34:47.
Responder Con Cita
  #8  
Antiguo 29-03-2008
Lorena83 Lorena83 is offline
Registrado
 
Registrado: mar 2008
Posts: 4
Poder: 0
Lorena83 Va por buen camino
Sí, es otra solución. Nunca había prestado atención a esos componentes. De hecho creo que se basa en las funciones API que hemos estado comentando.

Por otro lado, quiero seguir rizando el rizo. Imaginemos que usamos FindFirstChangeNotification/NextChangeNotification con FILE_NOTIFY_CHANGE_LAST_WRITE para detectar los archivos modificados. Pero ¿ como haríaris para detectar cuales de ellos realmente han sido alterados ? ¿ Conoceis alguna función que permita obtenerl sus nombre p.e. directamente ?

Porque una manera de hacerlo sería tener la fecha de modificación de todos los archivos del directorio que estemos monitorizando y cuando salta la función que hemos diseñado comprobar una por una las fechas de modificación para ver cual fue alterada. Esto funcionaría bien pero en un directorio con miles de archivos puede ser poco eficiente. No sé si me he explicado.

Alguna sugerencia ??

Un saludo.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Cómo cerrar otra aplicacion desde mi aplicacion en Delphi 7 Gaby123 API de Windows 5 04-01-2007 22:44:51
copiar fichero desde otra maquina karla Varios 2 17-10-2006 10:04:57
¿Se puede capturar los datos de un puerto serie de otra aplicación? NPIdea Varios 2 06-06-2006 13:45:19
Capturar datos desde un fichero .pdf taita Varios 0 19-10-2005 01:03:26
capturar datos de otra ventana (una pregunta dificil ;-D ) Angel API de Windows 1 01-08-2003 15:44:37


La franja horaria es GMT +2. Ahora son las 21:47:06.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi