FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Cliente FTP con FW+xH
Posts: 102
Joined: Fri Oct 14, 2005 12:03 AM
Cliente FTP con FW+xH
Posted: Tue Jan 24, 2012 11:07 AM

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

Posts: 150
Joined: Tue Jul 15, 2008 07:12 PM
Re: Cliente FTP con FW+xH
Posted: Tue Jan 24, 2012 12:18 PM

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
//----------------------------------------------------------------------------//

Posts: 102
Joined: Fri Oct 14, 2005 12:03 AM
Re: Cliente FTP con FW+xH
Posted: Tue Jan 24, 2012 06:15 PM

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...

Posts: 1303
Joined: Tue Jul 21, 2009 08:12 AM
Re: Cliente FTP con FW+xH
Posted: Tue Jan 24, 2012 08:40 PM

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.
Posts: 410
Joined: Sun Jan 31, 2010 03:30 PM
Re: Cliente FTP con FW+xH
Posted: Sun Jan 29, 2012 09:34 AM

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

Johnson Russi
Colombia

Posts: 711
Joined: Thu Oct 06, 2005 09:57 PM
Re: Cliente FTP con FW+xH
Posted: Sun Jan 29, 2012 12:26 PM

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
Posts: 27
Joined: Fri Jul 22, 2011 04:04 AM
Re: Cliente FTP con FW+xH
Posted: Sun Jan 29, 2012 07:14 PM
usando script:
Code (fw): Select all Collapse
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
Posts: 1789
Joined: Tue Oct 11, 2005 05:01 PM
Re: Cliente FTP con FW+xH
Posted: Mon Jan 30, 2012 01:10 AM
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 (fw): Select all Collapse
?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)
Posts: 102
Joined: Fri Oct 14, 2005 12:03 AM
Re: Cliente FTP con FW+xH
Posted: Wed May 02, 2012 01:52 AM

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 los casos 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

Continue the discussion