Cliente FTP con FW+xH

Cliente FTP con FW+xH

Postby gsabattino » 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
User avatar
gsabattino
 
Posts: 102
Joined: Fri Oct 14, 2005 12:03 am
Location: Valencia, Venezuela

Re: Cliente FTP con FW+xH

Postby postinelli » 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
//----------------------------------------------------------------------------//
postinelli
 
Posts: 147
Joined: Tue Jul 15, 2008 7:12 pm
Location: Argentina

Re: Cliente FTP con FW+xH

Postby gsabattino » Tue Jan 24, 2012 6: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...
User avatar
gsabattino
 
Posts: 102
Joined: Fri Oct 14, 2005 12:03 am
Location: Valencia, Venezuela

Re: Cliente FTP con FW+xH

Postby lucasdebeltran » Tue Jan 24, 2012 8: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.
User avatar
lucasdebeltran
 
Posts: 1303
Joined: Tue Jul 21, 2009 8:12 am

Re: Cliente FTP con FW+xH

Postby russimicro » Sun Jan 29, 2012 9:34 am

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

Johnson Russi
Colombia
russimicro
 
Posts: 225
Joined: Sun Jan 31, 2010 3:30 pm
Location: Bucaramanga - Colombia

Re: Cliente FTP con FW+xH

Postby Manuel Valdenebro » 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
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

Postby roberio » Sun Jan 29, 2012 7:14 pm

usando script:
Code: Select all  Expand view


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
roberio
 
Posts: 27
Joined: Fri Jul 22, 2011 4:04 am

Re: Cliente FTP con FW+xH

Postby carlos vargas » Mon Jan 30, 2012 1: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: Select all  Expand view

?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
carlos vargas
 
Posts: 1686
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: Cliente FTP con FW+xH

Postby gsabattino » Wed May 02, 2012 1: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
User avatar
gsabattino
 
Posts: 102
Joined: Fri Oct 14, 2005 12:03 am
Location: Valencia, Venezuela


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 85 guests