PDA

Ver la Versión Completa : IdFtp, problema con localización de archivo


klionsis
27-08-2008, 12:58:27
Hola gente, necesito que me ayuden con un problema que tengo con idFtp. Lo único que quiero hacer es bajar un archivo desde un FTP pero no estoy pudiendo, les digo porque.

Antes que nada quiero deciles que he tomado como base para lo que quiero hacer lo que indica salvica (http://www.clubdelphi.com/foros/showthread.php?t=56434&highlight=bajar+archivo+ftp+progressbar+dialog) en uno de los hilos donde el mismo cita un ejemplo de trucomania (http://www.q3.nu/trucomania/foros/viewtopic.php?p=1308&sid=6a89056ce2741dfe67b96cca183ab987).

Si accedo por algún browser el archivo que quiero bajar se encuantra en una dirección como la siguiente: ftp.nombre.com/clientes/htm/, colocando esta URL, en el browser veo los archivos listados y basta con solo hacer click en uno para bajarlo.

El tema es que desde idFTP solo me puedo conectar si en la propiedad Host del componente le coloco ftp.nombre.com y no toda la ruta donde se encuentra el archivo, por lo cual al momente de verificar el tamaño del archivo en cuestión, no lo hace, si no que asigna -1 como tamaño del mismo. El archivo que quiero bajar es una tabla DBF. El código seria algo como esto:

Procedure TForm1.Button2Click(Sender: TObject);

Var
Tam,FHandle,BytesEnviados : integer;

Begin
IdFTP1.Username := 'usuario@usuario.com';
IdFTP1.Password := 'password';
IdFTP1.Host := 'ftp.nombre.com';

Try
IdFTP1.Connect ;
Except

Showmessage ('El Archivo no fue recibido');
End;


If IdFTP1.Connected then

Begin
IdFTP1.TransferType := ftBinary;
Tam := IdFTP1.Size('/clientes/htm/archivo.dbf');
ProgressBar1.Min := 0;
ProgressBar1.Max := Tam;
IdFTP1.BeginWork(wmRead);

Try
IdFTP1.Get('/clientes/htm/archivo.dbf',
'Archivo.dbf',true);
IdFTP1.EndWork(wmRead);
IdFTP1.Disconnect;
Finally
FHandle := FileOpen('Archivo.txt', 0);
BytesEnviados := Getfilesize(FHandle,nil);
FileClose(FHandle);
{
El Tamaño del archivo recibido lo tengo que leer del disco
porque si cuento los bytes que bajaron
me va a dar menos de los que leí en el servidor, supongo que
porque el componente comprime aun más que ZipMaster
}
If BytesEnviados < Tam then
ShowMessage('El Archivo no pudo ser Recibido')
Else
ShowMessage
('El Archivo fue Recibido corréctamente');
Close;
End;

End;

End;

// evento onWork del ftp

Procedure TForm1.IdFTP1Work(Sender: TObject; AWorkMode: TWorkMode;

Const AWorkCount: Integer);

Begin
ProgressBar1.Position := AWorkCount
End;


Espero que me puedan ayudar, muchas gracias.