Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Saber si un archivo ha sido modificado desde fuera (https://www.clubdelphi.com/foros/showthread.php?t=35257)

ixMike 05-09-2006 18:46:52

Saber si un archivo ha sido modificado desde fuera
 
Veréis...

tengo un programa, que utiliza archivos de texto...
Bueno, tengo un archivo visualizado en un TMemo, y alguien, mientras está mi aplicación ejecutándose, alguien modifica ese archivo con el Bloc de Notas.

¿Cómo puedo saber, cuando mi aplicación toma el foco, que ese archivo ha sido modificado y cargarlo con los cambios en el TMemo?

Uso Delphi 3 Standard.

Gracias ;)

dec 05-09-2006 18:58:26

Hola,

Un posible forma que se me ocurre a bote pronto sería utilizar la fecha del archivo como referencia. Cuando carges el archivo te quedas con su fecha, además de con su contenido. En el momento en que este contenido se modifique, es decir, cuando el usuario modifique el contenido del "TMemo" que muestra el contenido del archivo, en el evento de turno, podría volverse a mirar la fecha del archivo, y, si no coincide con la que guardaste... es que ha sido modificado desde fuera de tu aplicación.

seoane 05-09-2006 19:08:26

Además de comprobar la fecha de la ultima modificación se me ocurre también que puedes usar el atributo FILE_ATTRIBUTE_ARCHIVE , es decir, cuando abres el archivo le quitas ese atributo, si otra aplicación hace algún cambio este atributo vuelve a estar presente. Algunas aplicaciones de backup lo usan para saber que archivos tienen que actualizar y cuales no.

Y la otra solución que se me ocurre, aunque pueda parecer una tontería, es comparar lo que tienes con lo que hay guardado. Aunque si son textos muy largos puede que no sea lo mas conveniente.

ixMike 05-09-2006 19:36:21

Muchas gracias por la sugerencia.

La verdad es que tenía otra cosas mejor: usar una función de la API, SHChangeNotify (o algo así, no lo recuerdo bien). Lo que pasa es que en mi versión de Delphi (3 standard) no está declarada en ninguna parte, y el ejemplo que vi era para Delphi 7.

dec 05-09-2006 19:40:39

Hola,

Cita:

La verdad es que tenía otra cosas mejor: usar una función de la API, SHChangeNotify (o algo así, no lo recuerdo bien). Lo que pasa es que en mi versión de Delphi (3 standard) no está declarada en ninguna parte, y el ejemplo que vi era para Delphi 7.
¿Tienes ese ejemplo todavía? ¿Podrías adjuntarlo en un mensaje en este mismo Hilo?

ixMike 05-09-2006 19:44:51

quizás mañana, a esta misma hora (es que tengo que pedírselo a la persona que me lo pasó, pues yo no lo tengo ahora mismo)

ixMike 11-09-2006 19:00:40

1 Archivos Adjunto(s)
Perdón por el retrasillo....

pero es que no he podido ir antes. Al final no tuve que pedirlo, lo tenía por ahí tirado en una carpeta "De Paso".

El ejemplo usa una función para comprobar todo lo que pasa con archivos y directorios (borrar, renombrar, crear, copiar...)

Aún no le he echado un vistazo

dec 11-09-2006 19:13:14

Hola,

No he podido probar el ejemplo que adjuntas, puesto que no dispongo del componente necesario, pero, en todo caso, a mí me parece que comprobar la fecha del archivo al momento de que se realize algún cambio en el editor de turno ("TMemo", por ejemplo), o bien en otro momento, o comprobar el "hash" del archivo, por ejemplo, sería algo más "eficiente" que estar constantemente pendiente de posibles cambios en un archivo.

No sé. Lo mismo estoy equivocado y resulta que es mejor hacerlo de otro modo, pero, en los programas que suelo utilizar, editores de código fuente, generalmente, suele preguntarse si se quiere actualizar o no el archivo en edición (porque este haya cambiado), por ejemplo, cuando el programa en cuestión "toma el foco" (después de perderlo). No me parecece que estén pendientes de los cambios de uno o más archivos en todo momento.

Pero, bueno, no me hagas mucho caso tampoco... es sólo mi opinión al respecto, y, la verdad sea dicha, digo por dónde empezaría, pero, lo cierto es que no me ví en una necesidad similar, aunque me la pueda imaginar... ;)


La franja horaria es GMT +2. Ahora son las 09:15:27.

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