Re: [vfp] Re: Subir-Bajar fichero por FTP y ahora SFTP

182 views
Skip to first unread message

francisco prieto

unread,
Oct 12, 2016, 7:31:36 AM10/12/16
to Comunidad de Visual Foxpro en Español
Kike,

Como lo resolviste?

Saludos,

Pancho
Córdoba
Argentina

El mié., 12 oct. 2016 a las 7:57, Kike. Sevilla (<enriquecarm...@gmail.com>) escribió:
Elimino este hilo.


El lunes, 10 de octubre de 2016, 12:16:55 (UTC+2), Kike. Sevilla escribió:
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"))
*!* ? FTPGet("FTP://myusername:mypas...@mysite.com/mydir/myfile.zip", "C:\myfile.zip", "MyCommand()")  &&& Del ejemplo

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.

Reply all
Reply to author
Forward
0 new messages