Comparar archivos

Me pregunto si puedes ayudarme en lo siguiente. Resulta que necesito generar un aplicativo que al inicializarse desde un equipo diferente al servidor me permita comparar si los archivos de la base de datos y las librerías que tiene el equipo son las mismas que tiene el servidor ya sea que estén actualizadas o no, es necesario probar que todo el archivo es idéntico, de lo contrario debo saber cual cambia y lograr traerlo desde el servidor hasta el otro equipo. Mi gran duda es como lograr comparar los archivos, te agradecería si puedes ayudarme con nombres de funciones para esto y quizá una visualización global de como podría llegar a solucionar este problema.

1 respuesta

Respuesta
1
Imagino que lo que estas tratando de hacer es una actualización automática por medio de una red local, pues si lo intentas por medios un poco más remotos por ejemplo ftp, vas a tener grandes problemas relacionados con la velocidad.
El planteamiento que me propones con respecto de la lectura de leer archivos o librerías, no esta mal, sin embargo tienes que tener en cuenta el tiempo de espera sobre la gama de archivos, etc.
Si me permites hacerte una propuesta, (esto es algo que ya hice y me funciono, bastante bien)
Cuando inicies el programa, este debería de hacerlo por medio de un pequeño batch en el sistema operativo, por ejemplo lo que antiguamente se conocía como un archivo bat. O archivo con procesos por lote,
Dentro de este bat, colocas 2 llamadas, una a un programita que verifique los cambios, y el otro que arranque la aplicación.
El programita que verifica simplemente va a una base de datos común, (que debería ser parte del servidor) en donde existen 2 tablas, la primera es la que contiene los archivos, o librerías que debe transferir, y la segunda contiene una verificación, por terminal, (utiliza la dirección ip), en donde registra si ya fue transmitida y copiada la librería o archivo. Para que cada vez que se ejecute dicho programa monitor no vuelva a transferir las modificaciones.
Una vez que termina la transferencia o monitoreo, entonces ya ejecuta tu aplicación.
Esto lo hice en 2 ejecutables uno el monitor y el otro la aplicación, por el simple hecho de que en algún momento vas a necesitar de modificar o transferir el propio ejecutable de la aplicación, y si en este se encuentra el monitoreo entonces no podrás copiarlo, por cuestiondes del sistema.
La idea de colocar los nombres de las librerías y archivos que vas a transferir, en una trabla es que unicamente esos van a ser monitoriados y/o transferidos. Y no la gama completa, que por lo general, no cambian.
El problema de leer por medio de funciones propias de pb, los archivos y librerías, es que como estos contienen caracteres especiales, en algún momento estos provocan que el programa sea bloqueado, y se quede congelado. Por lo que es algo que no tiene solución más que cerrar el programa o apagar y encender la maquina.
Con respecto a mi propuesta tienes la ventaja que al existir una tabla de verificación por terminal o IP, puedes hacer un pequeño sondeo de quien ya actualizo su aplicación y quien no.
O quien no esta actualizado, ya sea porque tiene problemas de comunicación o porque aun no ha echado a andar el programa.
Muchas gracias por tu ayuda, además, sí pensé que podría llegar a tener problemas al querer copiar el ejecutable propio, me parece que es una solución bastante conveniente y me das seguridad cuando me comentas que ya lo probaste. Ahora bien, no se si podrías comentarme un poco más especifico el desarrollo de bat y como debería funcionar, ademas no se como manejas las tablas con los nombres de los archivos que debe tener cada terminal y como iría guardando la actualización de cada uno con la dir ip, me pregunto si los nombres de los archivos es suficiente para la comparación, es decir, ¿no podría suceder que al comparar los nombres sean los mismos pero las actualizaciones distintas?, había pensado en comparar la fecha de actualización y así optimizar que sea la misma, no se que tan bueno y fácil sea porque tengo esa idea pero no se como desarrollarla, ¿podrías ayudarme? Gracias.
En el planteamiento final me permitiré describir con mayor detalle la idea que te propongo.
Primero creare 2 tablas,
una llamada actua_maestra
la cual contiene
nom_archivo
camino_archivo
fecha
y otra mas la cual llamare
actua_terminal
que contendra las columnas
nom_archivo
camino_archivo
Fecha
Terminal
Con estas 2 tablas ahora montare mi actualización
Puedo optar por colocar en la tabla actua_maestra unicamente los nombres de los archivos que voy a colocar para su sincronización, sin embargo la idea de separar el nombre del archivo y el camino corresponde a que por ejemplo puedo tener. Varios directorios del mismo archivo, de tal forma que si en un momento necesito de montar la version anterior puedo retrocederlo
El caso de la terminal es evidente,
Lo que tendrá que hacer el programa monitor.exe es simplemente verificar que los registros que están en la tabla aplica_maestra, también se encuentren en aplica_terminal, y correspondan al numero de ip.
Recuerda que el numero de ip puede ser extraído por medio de una función api, o simplemente leído de un archivo tipo ini, residente en cada terminal, o bien un numero único de terminal que dispongas colocarle.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas