Página 1 de 2

Comprobacion de archivos

Publicado: 18 Abr 2012 02:07
por remus
Buenas peña,
A ver si me podeis orientar en un proyectillo que tengo en mente. La funcion a realizar es la comprobacion y descarga de archivos. Aunque lo que me crea duda es la comprobacion, Os explico.

Supongamos que la ruta C:/archivos de programa/proyecto, tengo unos archivos llamados A, B y C.
Y en un servidor FTP tengo los archivos A,B,C y D.
Me gustaria realizar una apz que me compruebe que en la ruta C:/archivos de programa/proyecto, existe A,B,C y D como segun indico solo tendria A,B y C me faltaria el archivo D. Una vez comprobado que D no está, automaticamente la descargaria del FTP.

En resumen la idea es hacer que compruebe en el pc que existen los mismos archivos que en FTP, de no ser asi descargarlos.

Me podeis orientar? SAludos y gracias fieras.

Re: Comprobacion de archivos

Publicado: 18 Abr 2012 08:32
por rafaxplayer
yo usaria el plugin ftp , con la accion FTP.List para saber los archivos del ftp , despues haces un bucle con un file.find en el directorio local de los archivos del ftp, si da algun false ,guardas el nombre del archivo y ftp.download de ese o esos archivos, seria algo asi ...

Si no lo ves claro empieza el proyecto con lo que tengas y vamos desarrollando entre todos ;)

Re: Comprobacion de archivos

Publicado: 18 Abr 2012 16:51
por remus
Gracias Rafa pero el tema del bucle es lo que no termino de entender...

Así he empezado pero ya me quedo atascado:
Conecto con el FTP y le digo que me muestre en un Listbox con casillas para check los diferentes directorios del FTP, para que al seleccionar uno me busque en un directorio u otro. Pero no se decirle a file.find (en este caso al Listbox) que busque en el directorio local de los archivos. No se como seguir y le he dado mil vueltas. A ver si me haceis ver la luz.
FTP.Connect("server", "user", "pass", "", true);
FTP.ChangeDir("/descargas/panel7th/Campeonatos");
-- display the name, size and date for every folder in the current directory
-- in an AutoPlay Media Studio listbox object named "DirList"
-- (note: the listbox object must already exist on the current page)

-- empty the listbox
ListBox.DeleteItem("ListBox1",LB_ALLITEMS);

tbFolders = FTP.ListFolders();

for i = 1, tbFolders.Count do
    local name = tbFolders[i].Name;
    local size = tbFolders[i].Size;
    local date = tbFolders[i].Date;

    ListBox.AddItem("ListBox1", name.."", "");
end

Re: Comprobacion de archivos

Publicado: 18 Abr 2012 19:41
por rafaxplayer
Bueno por partes ... para que quieres listar los directorios? , eso es cosa tuya , pero tu consulta era que comprobara los archivos de un directorio en el ftp (por ejemplo : "/descargas/panel7th/Campeonatos") si alguno no existia en el directorio local por ejem: "Autoplay\\Docs\\Files"

Bien según tu código , conectas al ftp y entonces deberías listar archivos del directorio que quieras comprovar , por ejemplo:
FTP.Connect("server", "user", "pass", "", true);-- conectas
FTP.ChangeDir("/descargas/panel7th/Campeonatos");--accedes al directorio
tblFiles = FTP.ListFiles()-- listas archivos 
Una vez tienes la tabal con los archivos del ftp , la extensión .Name es el nombre ,si lees la ayuda veras que la tabla da mas detalles sobre los archivos... y ahora tendriamos que hacer un bucle para comprovar si hay alguno que no esixte en nuestro directorio local , mejor que file.find ( sorry) seria File.DoesExist :
for i = 1, tbFiles.Count do-- Bucle para recorrer la tabla de los archivos del ftp
	bValue = File.DoesExist(_SourceFolder.."\\Autoplay\\Docs\\"..tbFiles[i].Name);-- Comprobamos si cada uno existe en el dir local

	if bValue == false then -- si da falso , es que no existe ( leer ayuda)
		Dialog.Message("Notice", "Se ha encontrado que "..tbFiles[i].Name.." no existe en tu directorio local", MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);-- mensage
	end

end
Comprueva si esto te funciona y ya seguimos con el sistema de descarga y demas ;)

Re: Comprobacion de archivos

Publicado: 19 Abr 2012 09:51
por abood1987
Well done  rafax

:pc:

Re: Comprobacion de archivos

Publicado: 20 Abr 2012 12:27
por remus
Dios tienes razon con File.DoesExist, no se me hubiera ocurrido en la vida.... ok estoy fuera de casa hasta el martes, voy a ver si puedo meterla mano estos dias y si no lo pruebo en cuanto llegue...

Muchas gracias Rafa te mantengo informado segun haga la prueba...
Gracias fieras si es que lo que haceis aquí no tiene nombre y no está pagado.

Re: Comprobacion de archivos

Publicado: 21 Abr 2012 12:32
por mensajero1
Muy interesante... me lo apunto!!!

Re: Comprobacion de archivos

Publicado: 05 May 2012 02:44
por remus
Buenas chicos he estado de vacaciones y arreglando pequeños asuntillos y he tenido que dejar esto un poquito de lado.
Pero vengo con ganas de retomarlo.

He seguido al pie de la letra los consejos de Rafa (al cual le estoy enormemente agradecido) pero cada me estoy liando mas. Y por mas horas y horas que le estoy echando no consigo aclararme y la cabeza me echa humo, me cabreo apago el pc y lo dejo hasta que me vuelven a entrar las ganas.

Como veo que puede ser que con forme pido mas ayuda mas dudas me asaltan os subo una pequeña programa el cual pretendo imitar.
Os situo antes que nada para que sepais de que va el tema.

A ver pertenezco a una comunidad de simracers en la cual organizamos campeonatos de carreras online con el simulador rfactor. Este simulador es de codigo abierto y existen muchos modders que hace de rfactor un simulador ilimitado.
Bien dentro de estos campeonatos que organizamos segun del tipo que sean se necesitan descargar unos archivos u otros. Hasta ahora estamos usando el 7th panel, creado por mi gracias a esta fantastica comunidad, se puede ver y probar aquí http://www.7thracing.com/forum/index.ph ... 649.0.html El caso es que hemos encontrado un programa que tiene la misma funcion que nuestro 7thPanel pero con la mejora de que automaticamente te comprueba los archivos de tu pc con los subidos en el FTP o servidor.
Esto hace mucho mas comodo para el usuario conseguri los archivos necesarios para poder competir en nuestros campeonatos.

Bien el programa al que me refiero se llama SIMSYMCPRO.
Os lo dejo aqui la descarga http://www.7thracing.com/descargas/prog ... yncPro.zip
NOTA: Deciros que no funcionara si no teneis el simulador instalado.Si quereis probarlo desde nuestro 7th panel podeis bajarlo en version lite que no pesa mucho.

Y ahora os dejo unas imagenes de como es su funcionamiento.

Esto es el programa en si, Como se puede ver se elige un campeonato al cual deseas descargar sus archivos.
Imagen


Una vez seleccionado puedes iniciar la descarga.
Imagen

Otra captura de la descarga.
Imagen

Imagen uan vez descargado los archivos necesarios.
Imagen

Yo lo unico que necesito es saber como compara los archivos locales con los alojados en el servidor o FTP.
A ver si un alma iluminada me enseña el camino.

Re: Comprobacion de archivos

Publicado: 05 May 2012 03:57
por webultra
Lo que necesitas es fácil de lograr, ya he hecho algo similar con un FileMonitor (comprueba si los archivos fueron modificados, eliminados ó creados) pero es para otra cosa y nada de FTP, así que más sencillo. Lo que debes hacer es primero generar una lista de los archivos que tienes en tu computadora (obvio de la carpeta a donde deseas bajar los archivos) y dicha lista la guardas en una tabla de lua. Te quedará algo así:

tabla = {};
tabla[1] = "archivo.x"
tabla[2] = "archivo.y"
tabla[3] = "archivo.z"

Luego te bajas una lista de los archivos del ftp, la cual en una tabla de lua te quedará así:

tablaftp = {};
tablaftp[1] = "archivo.x"
tablaftp[2] = "archivo.y"
tablaftp[3] = "archivo.z"
tablaftp[4] = "archivo.ccc"

Luego haces un "for loop" de la siguiente forma:
for y, archivoftp in pairs(tablaftp) do
	for x, archivolocal in pairs(tabla) do
		if(archivolocal == archivoftp) then
			tablaftp[y] = nil;
			tabla[x] = nil;
			break;
		end
	end
end
A la tabla lua llamada "tablaftp" le quedarán sólo los archivos que existen en el ftp pero que no existen en tu computadora.

Re: Comprobacion de archivos

Publicado: 05 May 2012 16:36
por remus
Ok pero imagino que estas tablas debería de crearlas en formato .ini
Y luego una de ellas ubicarla en el FTP y la otra en local.
y si eso es correcto ¿al for loop como le indico la ruta donde esta ubicada en el FTP? ¿Voy bien encaminado?

Joer es que de verdad que esto se me escapa.

Re: Comprobacion de archivos

Publicado: 05 May 2012 20:04
por webultra
Obviamente no hablo de nada de archivos INI. La tabla de archivos del FTP ya la tienes (rafax sugirió tbFiles) y la de los arcihvos de tu computadora la sacas haciendo un File.Find. Me me preguntes como hacerlo ya que es algo realmente sencillo.

Re: Comprobacion de archivos

Publicado: 06 May 2012 22:23
por remus
rafaxplayer escribió:Bueno por partes ... para que quieres listar los directorios? , eso es cosa tuya , pero tu consulta era que comprobara los archivos de un directorio en el ftp (por ejemplo : "/descargas/panel7th/Campeonatos") si alguno no existia en el directorio local por ejem: "Autoplay\\Docs\\Files"

Bien según tu código , conectas al ftp y entonces deberías listar archivos del directorio que quieras comprovar , por ejemplo:
FTP.Connect("server", "user", "pass", "", true);-- conectas
FTP.ChangeDir("/descargas/panel7th/Campeonatos");--accedes al directorio
tblFiles = FTP.ListFiles()-- listas archivos 
Una vez tienes la tabal con los archivos del ftp , la extensión .Name es el nombre ,si lees la ayuda veras que la tabla da mas detalles sobre los archivos... y ahora tendriamos que hacer un bucle para comprovar si hay alguno que no esixte en nuestro directorio local , mejor que file.find ( sorry) seria File.DoesExist :
for i = 1, tbFiles.Count do-- Bucle para recorrer la tabla de los archivos del ftp
	bValue = File.DoesExist(_SourceFolder.."\\Autoplay\\Docs\\"..tbFiles[i].Name);-- Comprobamos si cada uno existe en el dir local

	if bValue == false then -- si da falso , es que no existe ( leer ayuda)
		Dialog.Message("Notice", "Se ha encontrado que "..tbFiles[i].Name.." no existe en tu directorio local", MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);-- mensage
	end

end
Comprueva si esto te funciona y ya seguimos con el sistema de descarga y demas ;)
Ok Perfecto ahora si me va.
El caso es que por un par de faltas de ortografia no me funcionaba y me liaba con lo que no llegaba a entender el codigo.

Ahora como haria la descarga en caso de dar un valor Falso?

Re: Comprobacion de archivos

Publicado: 07 May 2012 00:30
por rafaxplayer
El ejemplo del ayuda del plugin...
FTP.Download("1ws2610.txt", _TempFolder .. "\\Hamlet.txt");
err = Application.GetLastError();

-- step 4: log off
FTP.Disconnect();

-- ...now check whether FTP.Download generated an error
if err == FTP.OK then
    Dialog.Message("Success!", _TempFolder.."\\Hamlet.txt was downloaded successfully!");
else
    Dialog.Message("Error", _tblErrorMessages[err]);
end

Re: Comprobacion de archivos

Publicado: 07 May 2012 22:35
por remus
Gracias rafa. perfect.
Es que no se por que no me va la ayuda la action FTP. y algunas otras y en la web de indigorose no la encuentro. ¿Me podeis pasar el enlace?

y ya que estamos con el tema, si quiero descargar todo lo que se encuentra en un directorio del FTP ya que este ademas de archivos contendria tambien carpetas
¿deberia de ponerlo así?
FTP.Connect("xxxxxxx", "xxxxxxxxxxx", "xxxxxxxxxx", "", true);
FTP.ChangeDir("/descargas/panel7th/Campeonatos/Formula 1");
tblFiles = FTP.ListFiles()-- listas archivos
target_folder = Dialog.FolderBrowse("Instalar en carpeta raiz de rFactor ", "C:\\");

for i = 1, tblFiles.Count do-- Bucle para recorrer la tabla de los archivos del ftp
        bValue = File.DoesExist(target_folder.."\\Autoplay\\Docs\\"..tblFiles[i].Name);-- Comprobamos si cada uno existe en el dir local

        if bValue == false then -- si da falso , es que no existe ( leer ayuda)
                FTP.Download("*.*", target_folder.."*.*");
err = Application.GetLastError();

Re: Comprobacion de archivos

Publicado: 07 May 2012 23:09
por Agotaras123
Aquí te dejo un enlace a un ejemplo de ftp: http://alucardfile.alucardwarez.net/?download=xFtp3.apz

Re: Comprobacion de archivos

Publicado: 08 May 2012 00:30
por rafaxplayer
remus escribió:Gracias rafa. perfect.
Es que no se por que no me va la ayuda la action FTP. y algunas otras y en la web de indigorose no la encuentro. ¿Me podeis pasar el enlace?
Deberia provar en project/plugins/FTP/about plugin/plugin help si esto no te va deberias hacer una limpieza de mas y reinstalar los plugins con el pack de ceone
remus escribió: y ya que estamos con el tema, si quiero descargar todo lo que se encuentra en un directorio del FTP ya que este ademas de archivos contendria tambien carpetas
¿deberia de ponerlo así?
El código que muestras tiene errores por un tubo , falta un end lo primero , utiliza list.folder para saber is hay carpetas y las tendrás que volver a crear y rellenar de archivos descargados del ftp , haber si tengo mas tiempo y monto algo , ves probando cosillas

Re: Comprobacion de archivos

Publicado: 11 May 2012 21:26
por Daniel_Lechu
Yo en un proyecto que hice hace tiempo y lo hacía con un archivo situado en la FTP, el cual podía acceder a través de HTTP también con la lista de archivos e incluso el CRC para comprobar que estaba correctos o si se habían modificado, después ese archivo lo abría y comprobaba los archivo.
Más o menos sería así:

HIDE: ON
Hidebb Message Hidden Description


y el archivo con la lista de archivos sería:
file1.ext@12345
file2.ext@12345
file3.ext@12345
...
El cual es primero el nombre del archivo y después de la arroba el crc, el cual es opcional pero viene bien por si modificas el archivo.

Es un ejemplo básico, pero sirve para lo que necesitas:
Lo que hace es cuando pulsas el botón se conecta a la FTP y se baja el archivo con la lista de archivos, después comprueba si existen los archivos. Si existe comprueba el CRC y si no se lo baja.

Re: Comprobacion de archivos

Publicado: 14 May 2012 10:16
por remus
Muchas gracias, lo comprobaremos que a mi esto curiosear ejemplos me encanta ya que es como mas aprendo.

Re: Comprobacion de archivos

Publicado: 21 May 2012 17:37
por remus
Nada que no adelanto con el tema este. Consigo conectar, comprobar si existe el archivo y descargarlo siempre y cuando yo le indique nombre y formato.

Este es el codigo que estoy usando:
FTP.Connect("xxxxxxxxxx", "xxxxxxxx", "xxxxxxxxx", "", true); --Datos para conectarnos al FTP
FTP.ChangeDir("/descargas/panel7th/Campeonatos/Formula 1");--Situacio en el directorio deseado
tblFiles = FTP.List()-- listado de archivos
target_folder = Dialog.FolderBrowse("Instalar en carpeta raiz de rFactor ", "C:\\");--Seleccion dir local

for i = 1, tblFiles.Count do-- Bucle para recorrer la tabla de los archivos del ftp
        bValue = File.DoesExist(target_folder..tblFiles[i].Name);-- Comprobacion si cada uno existe en el dir local

        if bValue == false then -- si da falso , es que no existe
                Dialog.Message("Notice", "Se ha encontrado que "..tblFiles[i].Name.." no existe en tu directorio local", MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);-- mensage
                        FTP.Download("archivoA.txt", target_folder.. "\\archivoA.txt");--Descarga
err = Application.GetLastError();

-- desconectar
FTP.Disconnect();

--Comprobacion si FTP dió error
if err == FTP.OK then
    Dialog.Message("Éxito!", target_folder.."se ha descargado satisfactoriamente!");
else
    Dialog.Message("Error", _tblErrorMessages[err]);
end
        end

end
Como se puede ver en la descarga FTP consigo descargar por que le indico como se llama y su formato, (archivoA.txt) pero si le pongo por ejemplo un comodin "*.*"
¿ no deberia descargarme todo lo que hubiera en ese directorio? tal que asi:
FTP.Download("*.*", target_folder.. "\\*.*");--Descarga
Quiero descargar todo lo que hay en ese directorio tanto carpetas como archivos pero no lo consigo.

Re: Comprobacion de archivos

Publicado: 26 May 2012 16:05
por remus
Nadie? vamos chicos que me queda el ultimo suspiro jajaj