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
Cliente FTP con FW+xH
- gsabattino
- Posts: 100
- Joined: Fri Oct 14, 2005 12:03 am
- Location: Valencia, Venezuela
-
- Posts: 128
- Joined: Tue Jul 15, 2008 7:12 pm
- Location: Argentina
Re: Cliente FTP con FW+xH
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
//----------------------------------------------------------------------------//
//----------------------------------------------------------------------------//
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
//----------------------------------------------------------------------------//
- gsabattino
- Posts: 100
- Joined: Fri Oct 14, 2005 12:03 am
- Location: Valencia, Venezuela
Re: Cliente FTP con FW+xH
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...
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...
- lucasdebeltran
- Posts: 1303
- Joined: Tue Jul 21, 2009 8:12 am
- Contact:
Re: Cliente FTP con FW+xH
Giancarlo,
¿Qué versión de FWH y de Harbour usas?.
Tiene pinta de que tienes una versión antigua...
¿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.
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: 179
- Joined: Sun Jan 31, 2010 3:30 pm
- Location: Bucaramanga - Colombia
Re: Cliente FTP con FW+xH
Esta solución me funciona perfecto..
viewtopic.php?f=6&t=20501&p=108900&hilit=JOHNSON+RUSSI#p108900
Johnson Russi
Colombia
viewtopic.php?f=6&t=20501&p=108900&hilit=JOHNSON+RUSSI#p108900
Johnson Russi
Colombia
- Manuel Valdenebro
- Posts: 706
- Joined: Thu Oct 06, 2005 9:57 pm
- Location: Málaga-España
Re: Cliente FTP con FW+xH
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.
#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
Manuel
Re: Cliente FTP con FW+xH
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
- carlos vargas
- Posts: 1421
- Joined: Tue Oct 11, 2005 5:01 pm
- Location: Nicaragua
Re: Cliente FTP con FW+xH
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
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)
Carlos Vargas
Desde Managua, Nicaragua (CA)
- gsabattino
- Posts: 100
- Joined: Fri Oct 14, 2005 12:03 am
- Location: Valencia, Venezuela
Re: Cliente FTP con FW+xH
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
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