Cliente FTP con FW+xH

Post Reply
User avatar
gsabattino
Posts: 100
Joined: Fri Oct 14, 2005 12:03 am
Location: Valencia, Venezuela

Cliente FTP con FW+xH

Post by gsabattino »

Hola Gente... Buen Día a tod@s!!!
Feliz y Prospero 2012!!!

Tenia mucho tiempo si entrar al foro y veo muchos nombres nuevos, lo cual me dice mucho de la aceptación de FW por la comunidad de programadores...

Se me esta presentando una necesidad, nueva para mi, en la que necesito subir y bajar archivos de datos en un servidor FTP desde FW... Mirando los los fuentes veo que estan clases tFTP, tFTPCli, tFTPFile, tFTPServ, y tFTPSess; y en los ejemplos estan FTPDir y FTPServ...
Por lo pronto la cosa se me ha trancado porque me sale un dialogo que me dice "Cannot load WinINet.dll!"... buscando encontre que esa DLL es parte de Windows, se encuentra en la carpeta System32 de Windows... la copie a la carpeta donde estoy tratando de que el ejemplo corra, y aun asi no hay forma...

Me gustaria una orientación de parte de quienes hayan tenido alguna experiencia accediendo a un servidor FTP desde FW...

Agradezco de antemano cualquier tip/orientación/comentario al respecto...

Giancarlo J. Sabattino
Valencia, Venezuela
postinelli
Posts: 128
Joined: Tue Jul 15, 2008 7:12 pm
Location: Argentina

Re: Cliente FTP con FW+xH

Post by postinelli »

Así hago yo para subir archivos a un ftp

//----------------------------------------------------------------------------//
Function FTPSendFiles( cFTPSite, aSource, aTarget, cUserFtp, cPassFtp )

Local lEnd := .f.
Local nBufSize := 2000
Local oInternet, oFTP

MsgRun( "Conectando al Sitio FTP...", "Espere...",;
{ || oInternet := TInternet():New(),;
If( Empty( oInternet:hSession ),;
MsgAlert( "Sin Conexión a Internet!" ),),;
oFTP := TFTP():New( cFTPSite, oInternet, Alltrim(cUserFtp),Alltrim(cPassFtp) ) } )

if Empty( oFTP:hFTP )
MsgStop( "Imposible Conectarse al Sito FTP!" )
return nil
endif

SendFiles( aSource, aTarget, nBufSize, lEnd, oFTP )

oInternet:End()

return nil
//----------------------------------------------------------------------------//
Static Function SendFiles( aSource, aTarget, nBufSize, lEnd, oFTP )

Local n
Local hSource
Local cBuffer := Space( nBufSize )
Local nBytes, nFile := 0, nTotal := 0
Local nTotSize := 0
Local oFile

for n = 1 to Len( aSource )
if ! File( aSource[ n ] )
MsgStop( "Archivo No Encontrado: " + aSource[ n ] )
exit
endif
hSource = FOpen( aSource[ n ] )
nTotSize += FSeek( hSource, 0, 2 )
FClose( hSource )
next

for n = 1 to Len( aSource )
hSource = FOpen( aSource[ n ] )

oFile = TFtpFile():New( aTarget[ n ], oFTP )
oFile:OpenWrite()
FSeek( hSource, 0, 0 )
nFile := 0
while ( nBytes := FRead( hSource, @cBuffer, nBufSize ) ) > 0 .and. ! lEnd
oFile:Write( SubStr( cBuffer, 1, nBytes ) )
end
FClose( hSource )
oFile:End()
if lEnd
exit
endif
next
Return nil
//----------------------------------------------------------------------------//
User avatar
gsabattino
Posts: 100
Joined: Fri Oct 14, 2005 12:03 am
Location: Valencia, Venezuela

Re: Cliente FTP con FW+xH

Post by gsabattino »

Gracias por el ejemplo...
Lo copie tal cual, pero aun me sigue saliendo el dialogo con el mensaje "Cannot load WinINet.dll!"...
pero... dos maquinas tengan el mismo problema??

Seguire buscando, pero aun asi acepto mas tips/ejemplos/sugerencias/comentarios...
User avatar
lucasdebeltran
Posts: 1303
Joined: Tue Jul 21, 2009 8:12 am
Contact:

Re: Cliente FTP con FW+xH

Post by lucasdebeltran »

Giancarlo,

¿Qué versión de FWH y de Harbour usas?.

Tiene pinta de que tienes una versión antigua...
Muchas gracias. Many thanks.

Un saludo, Best regards,

Harbour 3.2.0dev, Borland C++ 5.82 y FWH 13.06 [producción]

Implementando MSVC 2010, FWH64 y ADO.

Abandonando uso xHarbour y SQLRDD.
russimicro
Posts: 179
Joined: Sun Jan 31, 2010 3:30 pm
Location: Bucaramanga - Colombia

Re: Cliente FTP con FW+xH

Post by russimicro »

Esta solución me funciona perfecto..
viewtopic.php?f=6&t=20501&p=108900&hilit=JOHNSON+RUSSI#p108900

Johnson Russi
Colombia
User avatar
Manuel Valdenebro
Posts: 706
Joined: Thu Oct 06, 2005 9:57 pm
Location: Málaga-España

Re: Cliente FTP con FW+xH

Post by Manuel Valdenebro »

1) Tienes que comenzar añadiendo en la cabecera los siguientes includes:

#include "Fivewin.ch"
#include "wininet.ch"

2) Escribe la siguiente funcion:

FUNCTION SubirFtp( cFtpAddress, cUser, cPass, cOrigen, cDestino, nPort, nService )
local hWinInet, hInternet, hConnect, lOk

// cargamos la DLL si no estaba cargada
hWinINet := WinINet()

if hWinINet < 0 .or. hWinINet >= 32
hInternet := InternetOpen( "Valdenebro", INTERNET_OPEN_TYPE_DIRECT, 0, 0, 0 )
endif

hConnect := INTERNETCONNECT( hInternet, cFtpAddress, nPort, cUser, cPass, nService, 0, 0 )

IF hconnect == 0
ALERT ("ERROR EN CONEXION.",,"Descarga","X",,.t.)
ELSE
TRY
lOk := FTPPUTFILE( hConnect, cOrigen, cDestino, 0, 0 )
alert (lOk)
CATCH
ALERT ("Error FTP.",,"Descarga","X",,.t.)
END

ENDIF

INTERNETCLOSEHANDLE( hConnect )

INTERNETCLOSEHANDLE( hInternet )

RETURN nil


3) Llama a esa funcion desde cualquier parte de tu programa, sustituyendo las variables por las tuyas:
SubirFtp("ftp.xxxx.com",;
"nombreUsuarioFTP",;
"claveUsuarioFTP",;
"csv/pepe1.txt", ; // donde tienes el fichero origen
"/html/csv/pepe2.txt",; // donde quieres colocar en el servidor el fichero
21, 1 ) // 21 es el puerto FTP y 1 es el servicio


4) Si no te funciona, tómate un Redbull y prueba de nuevo.
Un saludo

Manuel
User avatar
roberio
Posts: 27
Joined: Fri Jul 22, 2011 4:04 am

Re: Cliente FTP con FW+xH

Post by roberio »

usando script:

Code: Select all


UploadFtp("c:\temp\clientes.txt")
DownloadFtp("clientes.txt")
DeleteFtp("clientes.txt")

*-----------------------------------------------------
Function DownloadFtp(cFile)
   oText=TTxtFile():New("c:\script.txt")
   oText:Open()
   oText:Add("SeuLogin")
   oText:Add("SuaSenha")
   oText:Add("binary")
   oText:Add("get /www/test/"+cFile+" c:\clientes1.txt") // pega o arquivo do ftp(pasta /www/test/) e grava no C: com o nome clientes1.txt 
   oText:Add("bye")
   oText:Add("quit")
   oText:Close()

   MyRun("ftp -s:c:\script.txt ftp.teste.net.br") // seu servidor de ftp nessa linha

   FERASE( "c:\script.txt" )
Return nil
*-----------------------------------------------------
Function UploadFtp(cFile)
 FERASE("c:\script.txt" )

   oText=TTxtFile():New("c:\script.txt")
   oText:Open()
   oText:Add("SeuLogin")
   oText:Add("SuaSenha")
   oText:Add("binary")
   oText:Add("cd /www/test") //abri pasta para upload
   oText:Add("put "+cFile)   // envia o arquivo para para pasta aberta do ftp
   oText:Add("bye")
   oText:Add("quit")
   oText:Close()

   MyRun("ftp -s:c:\script.txt ftp.teste.net.br")

 FERASE("c:\script.txt" )

Return nil
*-----------------------------------------------------
Function DeleteFtp(cFile)
   oText=TTxtFile():New("c:\script.txt")
   oText:Open()
   oText:Add("SeuLogin")
   oText:Add("SuaSenha")
   oText:Add("binary")
   oText:Add("delete /www/test/"+cFile) deleta o arquivo da pasta /www/test do seu ftp
   oText:Add("bye")
   oText:Add("quit")
   oText:Close()

   MyRun("ftp -s:c:\script.txt ftp.teste.com.br")

   FERASE( "c:\script.txt" )
Return nil

//----------------------------------------------------------*--------------------------------
Function MYRUN( cComando )
Local oShell, RET

  oShell := CreateObject( "WScript.Shell" )
  RET := oShell:Run( "%comspec% /c " + cComando, 0, .T. )
  oShell := NIL

Return iif( RET = 0, .T., .F. )

 
FWHX 11.11 # xHarbour 1.2.1 Rev.9411 ## Borland C++ 5.8.2
User avatar
carlos vargas
Posts: 1421
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: Cliente FTP con FW+xH

Post by carlos vargas »

Estimados, he encontrado que en las versiones recientes de fwh y xharbour, con harour no he probado
la funcion file esta fallando en ubicar archivos ubicados en la misma carpeta de la applicacion
esto luego de ocupar la instrucion set defa to

por ejemplo

Code: Select all

?file("miapp.exe")   //aca retorna .t.
set defa to d:\miapp\datos
?file("miapp.exe")   //aca retorna .f.
set path to ".\"
?file("miapp.exe")   //aca retorna .t.
Salu2
Carlos Vargas
Desde Managua, Nicaragua (CA)
User avatar
gsabattino
Posts: 100
Joined: Fri Oct 14, 2005 12:03 am
Location: Valencia, Venezuela

Re: Cliente FTP con FW+xH

Post by gsabattino »

Gracias a todos por sus aportes...

Ciertamente mis versiones de xHarbour y de FW estaban algo desactualizadas, por lo que antes de intentar otras alternativas (incluidas algunas de las que me han sugerido en este hilo) decidi actualizar mis versiones de xH, FWH, y los sistemas que he desarrollado con esas herramientas.

Sin embargo, una vez estando actualizado me encontre que los ejemplos igual muestran el mensaje de error "Cannot load WinINet.dll!" lo cual aparentemente, y segun lo que he leido en otros hilos, se debe a algun problema de compatibilidad entre xH, FW y Windows, ya que aun teniendo la ultima version de WinINet.dll, y teniendo todos los paths bien direccionados se mantiene el problema de que no se carga la fulana DLL.

Veo que yo no he sido el unico al que se le ha presentado el problema, y las soluciones siguen siendo problematicas porque en la mayoría de _ no funcionan, sin embargo di con un post de Enrico Maria Giordano donde plantea una solución que me funcionó perfecto y de hecho creo que es lo que a la final implementaré... http://fivetechsupport.com/forums/viewt ... tp#p123966

El tema de los scripts me parece interesante... no lo he probado, pero seguro que lo haré en lo que tenga algun rato libre...

Gracias a Todos por su apoyo y su granito de arena...
Un Abrazo y seguro los estaré molestando en alguna otra oportunidad.

Giancarlo J. Sabattino S.
Valencia, Venezuela
Post Reply