Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   Como hariais esto , un actualizador un tanto peculiar (https://www.clubdelphi.com/foros/showthread.php?t=71010)

radge 24-11-2010 12:22:18

Como hariais esto , un actualizador un tanto peculiar
 
Buenas , estoy buscando la forma de hacer un ejecutable que sea capaz de comparar los archivos que tengo en LOCAL (exe's y archivos de crystal report unos 80 o 100 en total) y enviar este archivo a un servidor (toda la información empaquetado con un xml por ejemplo).

La idea seria que al abrir el programa recorriese todo el directorio de trabajo y insertará un registro por cada archivo que encuentra con el nombre y la fecha de modificación , por ejemplo si la carpeta es c:\DirectorioDeTrabajo\ dentro tendria los archivos

archivo1.exe 01/10/2010 09:30:55
archivo2.exe 01/10/2010 09:30:55
informe1.rpt 01/10/2010 09:30:55
....
....


Una vez lo tengo todo referenciado en la BD , cojer todos estos registros y enviarlos a un webservice (no se como hacer el intercambio de información , SOAP , enviando un archivo ...)

Entonces el webservice compararia todos los registros que recibe con sus archivos en local y aquellos que encontrase más nuevos los pondria en un archivo ZIP que seria lo que devolveria al cliente.

El cliente se descarga el archivo ZIP y es descomprimido.Que os parece la idea ? ando bien encaminado ?
PD : la tecnologia a usar seria delphi7.

salu2 radge

ContraVeneno 24-11-2010 17:29:37

¿no sería mejor utilizar el número de versión en lugar de la fecha de modificación?

radge 24-11-2010 18:30:13

Si.. en eso tienes razón , voy a activar la opción en el proyecto que vaya incrementando el número de versión.

Pero por el resto que os parece la pelicula ?

salu2 radge

Neftali [Germán.Estévez] 24-11-2010 19:01:10

La idea a priori no parece nada mala.
Para los EXE puedes usar número de versión como comenta Contraveneno, para el resto la fecha de última modificación (siempre que desde el cliente no se modifiquen esos ficheros -o la fecha-).

Para obtener ficheros puedes buscar por FindFiles en los foros (es una función que hemos utlizado otras veces). Para obtener las fechas puedes revisar esta entrada.
Toda esa información puedes enviarla al WebService como si fuera una cadena, en eso no creo que haya problemas.
El WebService deberás hacer las comparaciones y generar un fichero (esto es lo que me parece más complejo) y devolver eso al cliente (un link de descarga).
Otra popción es que el cliente pase la cadena y un nombre de fichero para la descarga (un nombre aleatorio, por ejemplo). Debería esperar un tiempo al que el server generara el fichero y luego descargarlo (revisa la unit URLMon -creo ecordar-).

radge 25-11-2010 10:04:28

Ok.. la idea del webservice la veo un poco lioso .. ya que no he trabajado con ellos... y si simplemente comparo fichero a fichero de lo que tengo en LOCAL con lo que tengo en el ftp y bajo uno a uno por ftp , sin crear un ZIP ni nada ?

Método simple... pero efectivo no ?

salu2 radge

Neftali [Germán.Estévez] 25-11-2010 10:29:44

Hombre, si tienes posibilidad de montar un FTP es mucho más sencillo que la opción del WebService, yq que desde el cliente puedes hacerlo todo.

radge 25-11-2010 12:01:32

Si.. al final cambio de planes a partir de los datos del servidor voy a comparar con lo que tengo en local , entonces necesito alguna función que me devuelva todo el directorio de un FTP con la fecha de modificación de cada archivo.

De esto os suena si hay algo ? o debo hacer-lo con las INDY ?

gracias , radge

radge 25-11-2010 14:13:28

He probado a hacerlo con la función getFileTimes pero solo funciona para archivos en LOCAL

GetFileTimes('ftp://misite.com/test/'+ ListdoFicheros.Strings[i], CDate, MDate, ADate);

Y me devuelve false porque no tiene acceso a dicho archivo... se os ocurre como hacer esto ? Solo me falta esta parte como obtener la fecha de modificación de un archivo colgado en un ftp.

gracias, radge

Neftali [Germán.Estévez] 25-11-2010 14:19:48

Diría que GetFileTime (de la API de Windows) es hasta cierto punto lógico que sólo funcione en Local, puesto que el FTP puede estar "montado" vete tú a saber dónde... ;-)

Supongo que para eso deberás revisar las funciones que te ofrezca el componente que estés utilizando para conectarte al FTP; Debe tener un comando para recuperar la lista de archivos y sus propiedades.

radge 25-11-2010 16:31:35

Estoy trabajando con indy ftp para delphi 5 , lo que no se ver que versión...

Por google he buscado con google con "delphi indy ftp get file information" y nada de nada....

gracias , radge

radge 25-11-2010 17:01:14

NOTA : acabo de ver que con winInet se puede hacer "FtpGetFileSize Returns the size of a previously opened file from the server." , veo que es una DLL del propio windows porque esta en c:\windows\system32 , pero no se como cargar-la desde delphi5 para poder acceder a ella

Neftali [Germán.Estévez] 25-11-2010 17:26:55

Si estás trabajando con las Indy, creo que el tema va por el componente TidFTP y el método List. También revisa en la ayuda sobre la propiedad:

property DirectoryListing: TIdFTPListItems;

rgstuamigo 25-11-2010 22:28:32

Bueno el tema de actualizacion de versiones, :rolleyes: pues se a tratado muchas veces ;), por ejemplo revisa los siguientes hilos:
http://www.clubdelphi.com/foros/showthread.php?t=65336
http://www.clubdelphi.com/foros/showthread.php?t=66816, etc.
Saludos...:)

radge 01-12-2010 18:31:48

Muchas gracias a todos , al final ya lo hize , dependiendo del parametro que recibe se actualizada en LAN o via FTP , espero publicar el código por aquí en cuanto lo tenga depurado.

Lo que no consigo sacar el agua clara es como hacer que el mismo se "auto-actualize" no lo tengo nada claro... alguna idea o sugerencia ?

El concepto de auto-actualizar se me refiero a que se baje un archivo UPDATE.EXE y lo machaqué con el actual que se llamará igual y estará en ese momento en ejecución.

gracias radge


La franja horaria es GMT +2. Ahora son las 03:27:04.

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