Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   Descarga FTP (https://www.clubdelphi.com/foros/showthread.php?t=29025)

Luis Alberto 10-01-2006 17:39:27

Descarga FTP
 
Hola a todos

Tengo un FTP cualquiera,deceo saber si es posible descargar de un ruta especifica el archivo que se encuentre ahi. El nombre de ese archivo va estar cambiando entonces mi intencion es descargar ese archivo y despues borrarlo osea que siembre existira uno nada mas en esa carpeta.

En concreto
¿Puedo descargar un archivo de una rata especifica pero no se el nombre solamente se la extension?

Saludos...

Bicho 10-01-2006 18:05:25

Hola nuevamente Luis Alberto,

puedes usar el componente IdFTP. Tiene una propiedad llamada list a la que le puedes pasar por parámetro una máscara con la extensión que tu quieras para que te filtre los ficheros de dentro del directorio.
Un ejemplo será más claro.

Código Delphi [-]
function FTP;
Var StringList : tStringList;
    r : Integer;
begin
     IdFTP1.host := Host;
     IdFTP1.User := User;
     IdFTP1.Password := Password;
     try
        IdFTP1.connect;
        IdFTP1.changedir(dir);
     except
     end;

     IdFTP1.List(StringList, '*.txt', False);
     for r := 0 to StringList.count-1 do begin
          lista.Items.add(StringList[r]);
     end;
      IdFTP1.disconnect;
      StringList.Free;
end;

Espero te sirva de ayuda

Saludos

Luis Alberto 10-01-2006 18:47:27

Los filtro pero despues los descargo normal o como, ademas manejo el FTP con WinInet..

Bicho 11-01-2006 09:30:25

A que te refieres con descarga normal o como?
Cuando hemos filtrado los ficheros por su extensión, hemos insertado los nombres de los ficheros obtenidos dentro de una lista.
Lo único que queda hacer ahora es recorrer esa lista y para cada nombre que haya en ella hacer un Get para descargar el fichero
algo así como
Código Delphi [-]
IdFTP1.get(ArchivoDeLaLista,RutaDestinoDondeLoQuieresGuardar,True);

No conozco el componente Wininet o ahora mismo no recuerdo haberlo usado, de todos modos funcionan igual prácticamente todos los componentes de FTP.

Saludos

Luis Alberto 11-01-2006 17:15:20

Gracias a todos su ayuda me sirvio mucho gracias...

Luis Alberto 12-01-2006 16:13:44

Me surgio una duda para hacer lo contrario en vez de bajar todo lo que este en la carpeta que debo de hacer para subir todo lo que este en una carpeta local al ftp y la ruta que tengo?

Bicho 12-01-2006 17:06:12

Pues en lugar de usar la función Get usas la función Put

Dale un vistazo a la ayuda de Delphi referente al Put y a Get.

Saludos

Luis Alberto 14-01-2006 00:46:34

Me podrias explicar por que no sale, gracias de antemano

Bicho 14-01-2006 12:30:25

Que es lo que no te sale?? Explicate la ayuda de Delphi y la función Put, danos más información para que podamos ayudarte.
De todos modos si has seguio las instrucciones para hacer el Get como te indiqué no tendrías que tener ningún problema, sólo substituirlo por el Put.

Saludos

Luis Alberto 16-01-2006 15:59:51

Mira realmente mi pregunta es yo tengo los archivo en mi maquina local una carteoa llamada TXT que se encuentra en C:\TXT\dentro de ella aqui estan los archivos que quiero que automaticamente se tomen cada hora si hay archivos que los tome todos los que haya. el detalle es que el archivo tienen difierente nombre pero si son TXT todos quiero ver como realizar esto espero me puedan ayudar...

Saludos...

Bicho 16-01-2006 16:14:31

Puedes usar componentes del tipo TreeView, FileListBox de la paleta de Win 3.1, ShellTreeView de la paleta Samples, etc. Para poder listar los ficheros de un directorio.

Te doy un ejemplo con el FileListBox:
Código Delphi [-]
    FileListBox1.Mask := '*.TEXT'; //máscara para filtrar por extension txt
    FileListBox1.Directory := 'c:\TXT\'; //directorio donde buscar los ficheros
    FileListBox1.Update; //actualiza el contenido del objeto

Ya sólo te queda recorrer el FileListBox accediendo a sus items
Código Delphi [-]
FileListBox1.Items.Strings[x]
y para cada fichero encontrado lo subes con la función Put que te enseñé más arriba.

Saludos

Luis Alberto 16-01-2006 17:38:10

Quiero saber si puedes ayudarme cuando creo el archivo de TXT quiero colocarlo en dos carpetas una de archivos generados y otra que se llame archivos de salida asi cuando tome los archivos de salida y los suba al FTP los pueda borrar.

Saludos...

Bicho 16-01-2006 17:46:52

Que tal si una vez generado el fichero haces un Copyfile con ese fichero desde la carpeta de archivos generados a la de archivos de salida?

Código Delphi [-]
      CopyFile(PChar('c:\TXT\FicherosGenerados\Fichero1.txt'), PChar('c:\TXT\FicherosDeSalida\Fichero1.txt'), False);

Luis Alberto 16-01-2006 18:34:11

gracias me a servido bastante, no encuentro como borrar los archivo que ya se hayan subido al FTP.

Luis Alberto 16-01-2006 18:40:07

ademas cuando se conecta el ftp es todo normal pero como va ser automatico quiero saber como decirle que si no se conecto en sierto tiempo que se desconecta y que despues lo vuelva a realizar tu sabes como puedo realizar eso.

Saludos

Bicho 17-01-2006 10:01:09

Referente al tema del borrado del fichero, prueba ha hacer lo siguiente:
- Si has conseguido descargarte el fichero, luego haces un Delete;
Código Delphi [-]
IdFTP.Delete(AFilename);
Pero ten cuidado ponlo en un try except porque es posible que te de error sino tienes permisos de borrado en el servidor de FTP.

Referente al segundo tema, no te recomiendo que tengas el FTP abierto todo el tiempo. Tú te creas un proceso para descargar ficheros FTP, y otro para subirlos no?, en esos procedimientos, realizas lo que te comenté en mi primera respuesta:
- Conexión
- Descarga/Subida de ficheros //ya que los dos procedimientos serán igual, uno sube y el otro baja ficheros
- Desconexión

Luego puedes tener un timer activado para que cada cierto tiempo, p.ej cada 30 minutos realice una comprobación:
- Si hay ficheros en c:\TXT\ficherosparasubir\ entonces llamas al procedimiento FTP de Subida
- Tantao si habia fichero para subir como sino, llamas a la función de descarga de ficheros

Saludos

Luis Alberto 17-01-2006 16:05:23

El proceso es correcto lo tengo que se conecte cada 1 hora al FTP pero ahora si inteta conectarse y falla por x razon quiero que intente conectarse otra vez asi como unas 3 veces de no ser asi que se desconecte.

si me explique

Bicho 17-01-2006 16:14:22

Puedes crearte una variable local a las funciones de carga y descarga de ficheros, de tipo entero.

Luego un bucle que recorra el valor de la variable, desde 1 hasta 3, allí dentro validas si se ha conectado, o sino ha habido error, y en ese caso sales del bucle, en caso contrario continuas hasta 3 veces.
Si al final, continuas desconectado o el valor de la variable es 3 significará que has realizado los 3 intentos y aún así no has conseguido conectarte, sales del procedimiento y ya volverá a ejecutarse el timer dentro de una hora.

Luis Alberto 17-01-2006 22:39:22

Todo salio perfecto para poder subir archivos al FTP
pero cuando trato de bajar archivos download me marca error cuando le digo que: IdFTP1.List(StringList, '*.fff', False);

que puede ser que estoy haciendo mal?

Bicho 18-01-2006 10:50:23

No estaría de más que nos copiaras el texto del error que te marca.
Ya que sin eso poco podemos hacer para ayudarte

Saludos


La franja horaria es GMT +2. Ahora son las 09:25:21.

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