Hola.
¿Como se puede manejar FTP desde FiveWin?
Gracias
Hola.
¿Como se puede manejar FTP desde FiveWin?
Gracias
Si, FiveWin tiene una clase llamada QFTP, que te permite hacer FTP con FW, sin embargo no se que pasa con los sockets de FW que cuando utilizas esta clase con ficheros grandes no los copia completos.
(x)Harbour tiene la TIP.LIB que funciona mejor que los sockets de FW para transferencia de archvios, o bueno, por lo menos si copia ficheros grandes sin problemas.
personlamente yo utilizo el componente FTP de Funcky 6.0 funciona como un sueño.
Mi estimado Paco :
Puede usar la clase QFtp con las modificaciones que le hizo Luis Krause, la clase funciona muy bien, tanto para subir, como para bajar archivos.
Rene
Podrias decirnos como se usa Funcky con FWH para la transferencia de archivos via FTP, un ejemplo de codigo seria muy util ![]()
He tratado de usarlo, siguiendo el ejemplo que viene en Funcky pero consigo un error cuando trato de leer el archivo para download o upload
Error:Description:Error/Funcky6
DISP_E_UNKNOWNAME:BACKUP.RES
"BACKUP.RES" es el archivo que deseo transferir. He verificado que esta en el directorio indicado. No se porque dice que es desconocido
Saludos
George
Vikthor wrote:Mi estimado Paco :
Puede usar la clase QFtp con las modificaciones que le hizo Luis Krause, la clase funciona muy bien, tanto para subir, como para bajar archivos.
George wrote:Rene
Podrias decirnos como se usa Funcky con FWH para la transferencia de archivos via FTP, un ejemplo de codigo seria muy util
oFtp := TOleAuto():New("Funckyftp")
oFtp:Connect("ftp.google.d2g.com","usuario","password")
oFtp:ChangeDir ("\downloads\ads")
oFtp:Get("adsdemo.exe", "c:\adsdemo.exe",0)
oFtp:Disconnect()Rene,
No he logrado poner a trabajar ninguno de los ejemplos que tu has posteado de Funcky.
He tratado de multiple formas pero solo consigo errores.
Sera que necesito algunos wrappers, o quizas algun archivo ".ch"
Estoy usando la version de evaluacion funcky60 y tan pronto pueda ponerla a trabajar voy a comprarla, pues me interesna las conexiones ftp y los envios de email, que tu indicas "van de perlas" con funcky.
Saludos
George
George wrote:Rene,
No he logrado poner a trabajar ninguno de los ejemplos que tu has posteado de Funcky.
He tratado de multiple formas pero solo consigo errores.
Sera que necesito algunos wrappers, o quizas algun archivo ".ch"
Estoy usando la version de evaluacion funcky60 y tan pronto pueda ponerla a trabajar voy a comprarla, pues me interesna las conexiones ftp y los envios de email, que tu indicas "van de perlas" con funcky.
Saludos
George
oFtp := TOleAuto():New("Funckyftp")
oFtp:Connect("ftp.google.d2g.com","usuario","password")
oFtp:ChangeDir ("\downloads\ads")
/* aqui es donde puede surgir el problema erroneamente la forma de
* llamar al metodo seria:
* oFtp:Get("adsdemo.exe", "c:\adsdemo.exe",0)
*
* Sin embargo el metodo GET de funcky entra en conflicto con el metodo
* GET de TOleAuto para solucionarlo hacemos:
*/
oFTP:Get( "Get", "adsdemo.exe","c;\adsdemo.exe",0)
/* tambien es valido hacer:
oFtp:Invoque("Get", "adsdemo.exe","C:\adsdemo.exe",0) */
oFtp:Disconnect()Error occurred at: 08/30/2006, 20:40:35
Error description: Error TOleAuto/-1 Unknown error: TOLEAUTO:NEW
Args:
[ 1] = C FunckyFtp
Stack Calls
===========
Called from: => THROW(0)
Called from: win32ole.prg => TOLEAUTO:NEW(319)
Called from: MAIN.PRG => TESTFUNCKY(1095)
Called from: MAIN.PRG => (b)FRAMEBAR(344)Esto me funciona siempre bien.
Pruebalo
static cServer//:="204.233.245.140",
static odlg,ownd
static cDirIp1,cNomZipLo1,CNomZipRe1,cDirRemot1,cUser1,cPasswd1
function main()
set date to british
SET CENTURY ON
dbcloseall()
use tablaftp exclusive new
TablaFtp->(dbgotop())
cDirIP1:=alltrim(TablaFtp->DirIp)//Direccion IP
cDirLocal1:=alltrim(TablaFtp->DirLocal)//Direccion Local
cDirRemot1:=alltrim(TablaFtp->DirRemot)//Direccion Remota
cNomZipLo1:=alltrim(TablaFtp->NomZipLo)//Nombre Zip Local
cNomZipRe1:=alltrim(TablaFtp->NomZipRe)//Nombre Zip Remoto
cUser1:=alltrim(TablaFtp->User)//Usuario
CPasswd1:=alltrim(TablaFtp->Passwd)//Contraseña
lchdir(cdirlocal1)
dbcloseall()
FtpEnvio()
return nil
Function FtpEnvio()
local cuser,cpass,cremote,clocal,cfecha
cserver:=cdirip1//direccion IP del Server FTP
cuser:=cuser1//"usuario"
cpass:=cpasswd1//"contraseña"
cremote:=cdirremot1 // "directorio/publico/" directorio dentro del ftp
cnombre:=dtoc(date())//nombre del archivo
lchdir("envioftp") //ingreso a un directorio dentro de windows
//cremote=cremote+"/"+"prueba4"+".zip"
cfecha:=substr(dtoc(date()),7,4)+substr(dtoc(date()),4,2)+substr(dtoc(date()),1,2)
clocal:=cfecha+cNomZipLo1
if file(clocal)
ftpsend(cserver,cdirremot1,cuser,cpass,clocal)
endif
lchdir("..")
return nil
FUNCTION FtpSend(cFTPServer,cFTPDir,cFTPUser,cFTPPwd,cFile)
//--------------------------------------------------------//
LOCAL oFtp, oInt, hMon, lRet
if !Empty(cFTPDir) .AND. !Right(cFTPDir,1)=="/"
cFTPDir := cFTPDir+"/"
end
FtpInit(@oInt,@oFtp,cFTPServer,cFTPUser,cFTPPwd)
//hMon := fCreate("info.txt")
hmon:="ftp.txt"
if oFtp:hFtp > 0
SendFile(cFTPDir,cFile,oFtp,hMon,oInt)
else
//msginfo("HAY PROBLEMAS EN SU CONEXIÒN A INTERNET, DATOS NO PUDIERON SER ENVIADOS","IMPORTANTE")
end
oInt:End()
oFtp:end()
RETUrn NIL
FUNCTION FtpInit(oInt,oFtp,cFTPServer,cFTPUser,cFTPPwd)
//--------------------------------------------------------//
oInt := tInternet():New()
oFtp := TFtp():New(cFTPServer, oInt, cFTPUser,cFTPPwd)
RETU NIL
STATIC FUNCTION SendFile(cFTPDir,cFile,oFtp,hMon,oInt)
//--------------------------------------------------------//
LOCAL oFile, h, cBuff, nSize, nRead, nWrite
LOCAL lRet := .F.
oFile := TFtpFile():New(cFTPDir+cFile,oFtp)
oFile:OpenWrite()
if oFile:hFile > 0
h := fOpen(cFile)
nSize := fSeek(h,0,2)
fSeek(h,0,0)
cBuff := Space(nSize)
nRead := fRead(h,@cBuff,nSize)
fClose(h)
nWrite:= oFile:Write( cBuff )
If nWrite==nRead
lRet := .T.
//msginfo("DATOS FUERON ENVIADOS CORRECTAMENTE","INFORMACIÒN")
Else
//Msginfo("NO SE PUDO ENVIAR, ARCHIVO ESTÀ ABIERTO POR OTRO PROCESO, REVISELO","IMPORTANTE")
oInt:end()
oFtp:end()
End
else
//Msginfo("HAY PROBLEMAS EN ABRIR EL ARCHIVO PARA SER ENVIADO","IMPORTANTE")
oInt:end()
oFtp:end()
endif
RETURN lRet
El ejemplo que puse soporta archivos grandes, yo probe con archivos de 5MB y sin problemas.