Hola Grupo:
Necesito bajar ficheros desde un FTP, pero no lo logro. Lo puedo hacer de dos formar.
1ª Forma: por iFox.Ftp hago lo siguiente, dejo incluso las pruebas:
oFTP = CreateObject("iFox.FTP") &&&&&("iFox.DirectFTP")
oFTP.SetLicenseCode("11")
If oFTP.Connect(lchost, lcuser, lcpass)
llcd = oFTP.cd(lcdire)
lnFiles = 0
lnFiles = oFTP.Dir("/","*.*")
lnFiles = oFTP.Dir(".","*.*")
lnFiles = oFTP.Dir(".","*")
lnFiles = oFTP.Dir("","*.*")
lnFiles = oFTP.Dir("/","*")
lnFiles = oFTP.Dir(lcdire,"*.*")
lnFiles = oFTP.Dir("/", "*")
IF lnFiles <= 0
lnFiles = oFTP.Dir(lcdire, "*.*") &&&&lcdire) &&&, "*.*") &&&lcdire)
ENDIF
lnFiles = oFTP.Dir("", "*.*")
IF lnFiles <= 0
lnFiles = oFTP.Dir(lcdire, "*.*") &&&&lcdire) &&&, "*.*") &&&lcdire)
ENDIF
IF lnFiles <= 0
lnFiles = oFTP.Dir("./", "*.*")
ENDIF
IF lnFiles <= 0
lnFiles = oFTP.Dir(".", "*.*")
ENDIF
IF lnFiles <= 0
lnFiles = oFTP.Dir("/.", "*.*")
endif
For lnCont = 1 to lnFiles
lcName = oFTP.DirFiles(lnCont).FileName
If oFTP.Startdownload(lcName, "C:\DATA.ZIP")
Do While !oFTP.EOT
If oFTP.DownloadNextPart()
WAIT windows "Bytes transferred: " + Str(oFTP.TransferredBytes) NOWAIT noclear
ELSE
mensaje( "Error " + ALLTRIM(STR(oFTP.ErrorNumber)))
ENDIF
ENDDO
ELSE
mensaje( "Error " + ALLTRIM(STR(oFTP.ErrorNumber)))
ENDIF
oFTP.Enddownload()
ENDFOR
oFTP.Close()
endif
La conexión la hace perfecta, pero no encuentra los ficheros, por lo tanto no los baja. La subida la hago, también con iFox.FTP y lo hace estupendamente.
2ª Forma, también se conecta bien, pero no ve los ficheros.
SET PROCEDURE TO (lcraiz+"progs\ftp.prg") additive
oFTP = CREATEOBJECT('ftp_service')
LOCAL laDirArray(1)
STORE "" TO laDirArray
lchost = "home560709786.1and1-data.host"
llsuccess = oFTP.OpenInternet(lcuser, lcpass, lchost, "21")
*!* llsuccess = oFTP.OpenInternet(lcuser, lcpass, lchost, "22")
lccomentario = "Cambio directorio " + alltrim(lcdire)
va_por(lccomentario)
*!* llresp = oFTP.ChangeFtpDirectory(".")
lccomentario = "Enlace " + alltrim(lcuser)
va_por(lccomentario)
lcResult = oFTP.GetFtpDirectoryArray(@laDirArray,"*.*") &&&& "*.*")
lcResult = ALEN(laDirArray, 1)
lcResult = IIF(lcResult = 1, 0, lcResult)
lccomentario = "Encontrados " + IIF(TYPE('lcResult') = "N", ALLTRIM(STR(lcResult)), IIF(lcResult = .F., "N", "S"))
va_por(lccomentario)
IF ALEN(laDirArray, 1) > 1 &&&&&!EMPTY(laDirArray) && If Empty, there were no files found in the current Directory.
FOR x = 1 TO ALEN(laDirArray, 1)
IF laDirArray(x, 7) != "D"
IF FILE(lcdire_local+laDirArray(x, 1))
DELETE FILE(lcdire_local+laDirArray(x, 1))
endif
lnResult = oFTP.GetftpFile(laDirArray(x, 1),lcdire_local+laDirArray(x, 1), .F.)
IF lnresult = .T. AND FILE(lcdire_local+laDirArray(x, 1)) &&&Ha pasado bien y lo borro
ldfecha = DATE()
lchora = time()
llerror = .F.
lccomentario = "Pasado el fichero " + laDirArray(x, 1) + " de FTP ---> Local"
IF llborrar_fichero = .T.
lnResult = oFTP.DeleteftpFile(laDirArray(x, 1)) &&&&&Para borrar el fichero del ftp
IF lnResult = .T.
llerror = lnResult
lccomentario = "Borrado fichero " + laDirArray(x, 1) + " de FTP ---> Local"
endif
endif
ENDIF
endif
ENDFOR
ENDIF
oFTP.CloseInternet()
El alojamiento lo tengo con
1and1.es ellos han cambiado el protocolo de FTP a SFTP y puede que sea por eso que no funciona, porque cuando hice las pruebas, hace bastante tiempo, funcionaba bien.
Alguien tiene alguna forma de bajar los ficheros, decir que no sé ni el nombre ni cuántos son.
De este forma sí me baja los ficheros, pero tengo que saber el nombre y además no sé cómo borrarlo una vez bajados. Los ficheros que bajo son pequeños.
lcurl = "FTP://" + lcuser + ":" + lcpass + "@" + lchost + "/mensajes_recibidos.txt"
SET LIBRARY TO (LOCFILE("vfpconnection.fll","FLL"))
lnresp = FTPGet(lcurl, "F:\recibidos\mensajes_recibidos.txt", "")
*!* nConnectTotalBytes
*!* nConnectBytesSoFar
SET LIBRARY TO
Muchas gracias por la ayuda que puedan prestar.
Saludos cordiales.
Kike - Sevilla
España.