mmm veamos, te pongo código para que veas como se hace una descarga simple.
Código:
TIdFTP* ftp1 = new TIdFTP( NULL );
try {
ftp1->Username = "xxx";
ftp1->Password = "yyy";
ftp1->Host = "localhost"; //Podemos ahorrarnos estas líneas, porque las puedes escribir en conect
ftp1->Port = 21; //ejem. ftp1->Connect( "localhost" ); o ftp1->Connect( "localhost", 21 );
ftp1->Connect();
ftp1->ChangeDir( "MiCarpeta" ); //En caso de que un archivo no esté en la raíz del ftp
ftp1->Get(
"MiArchivo.txt",
"C:\\MiArchivo.txt", //Ruta del archivo, para que baje directamente
true, //si quieres que sobre escriba el archivo en caso de que exista
false //si quieres que resuma la descarga
);
ShowMessage( "el qrchivo se descargo." );
ftp1->Disconnect();
}
__finally {
delete ftp1;
}
Ahí veras los posibles parámetros que se le pueden dar a Conect, en primera no sé porque el compilador te deja pasar “Conect( true )” quizás por la versión de los componentes (tengo la 10.5.7), pero mejor acostúmbrate a no pasarle nada, por si cambias de versión.
También veras como utilizar get, para descargar directamente, sin necesidad de que declares un Stream, podrás sobrescribir un archivo (con lo que se soluciona el error de “Destination file already exists”), o podrás resumir las descargas, en caso de un fallo de conexión, o si te apetece ponerle pausa y resumen en tu apl, prueba este código en un botón, con los datos de tu ftp y si sigue dando el error que comentaste al principio, habrá que ver la configuración del ftp. Hasta donde recuerdo ese error es porque el ftp te contesta con un paquete reset, e interrumpe la conexión, pero no estoy seguro, por eso lo de probar el código que te dejo.