Estimados amigos, he tratado infructuosamente de crear una aplicacion que suba archivos y baje archivos de un sitio FTP, he utilizado la clase QFTP. Bajarlos me es imposible, lee el directorio del FTP y los archivos, pero cuando comienzo la descarga de cada uno, tambien queda como en un LOOP.
Hay alguna otra clase de Harbour o Fivewin para realizar este proceso ??
Gracias
PROBLEMAS CON FTP
- AngelSalom
- Posts: 664
- Joined: Fri Oct 07, 2005 7:38 am
- Location: Vinaros (Castellón ) - España
- Contact:
Con las clases nativas de FWH funciona muy bien.
/* ==========================================================================================
Func_Ftp
--------
Funciones para el manejo de FTP
Revisión : 04/04/2006 19:27
Revisado por : Angel
==========================================================================================
*/
#include "fivewin.ch"
Function Main()
Local oInternet, oFtp, cServFtp:="server",cUserFTp:="user",cPassFtp:="pass"
oInternet := TInternet():New()
oFTP := TFTP():New( Alltrim(cServFtp), oInternet, Alltrim(cUserFtp),Alltrim(cPassFtp) )
If ! Empty( oFTP:hFTP )
FtpSendFiles ({"file1.txt","file2.txt","file3.txt"},{"destfile1.txt","destfile2.txt","destfile3.txt"},oFtp)
Endif
oInternet:End()
Return (nil)
Function FTPSendFiles ( aSource, aTarget, oFTP )
Local nBufSize:=4096
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( "Fichero no encontrado: " + aSource[ n ] )
exit
endif
hSource = FOpen( aSource[ n ] )
nTotSize += FSeek( hSource, 0, 2 )
FClose( hSource )
SysRefresh()
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
SysRefresh()
while ( nBytes := FRead( hSource, @cBuffer, nBufSize ) ) > 0
oFile:Write( SubStr( cBuffer, 1, nBytes ) )
SysRefresh()
end
FClose( hSource )
oFile:End()
next
return nil
Function FtpGetFiles( aSource, aTarget, oFTP, oSay )
Local nBufSize:=4096
local n
local hTarget
local cBuffer := Space( nBufSize )
local nBytes, nFile := 0, nTotal := 0
local nTotSize := 0
local oFile, aFiles, aSizes := {}
for n = 1 to Len( aSource )
aFiles = oFTP:Directory( aSource[ n ] )
if Len( aFiles ) > 0
AAdd( aSizes, aFiles[ 1 ][ 2 ] ) // first file, size
nTotSize += ATail( aSizes )
else
AAdd( aSizes, 0 )
endif
SysRefresh()
next
nFile := 0
for n = 1 to Len( aSource )
hTarget = FCreate( aTarget[ n ] )
oFile = TFtpFile():New( aSource[ n ], oFTP )
oFile:OpenRead()
SysRefresh()
while ( nBytes := Len( cBuffer := oFile:Read( nBufSize ) ) ) > 0
FWrite( hTarget, cBuffer, nBytes )
If oSay<>NIL
oSay:SetText ("- Recibiendo :"+Str(nFile+=nBytes)+" de "+Str(nTotSize))
Endif
SysRefresh()
end
FClose( hTarget )
oFile:End()
next
return nil
No deberias tener problemas.
/* ==========================================================================================
Func_Ftp
--------
Funciones para el manejo de FTP
Revisión : 04/04/2006 19:27
Revisado por : Angel
==========================================================================================
*/
#include "fivewin.ch"
Function Main()
Local oInternet, oFtp, cServFtp:="server",cUserFTp:="user",cPassFtp:="pass"
oInternet := TInternet():New()
oFTP := TFTP():New( Alltrim(cServFtp), oInternet, Alltrim(cUserFtp),Alltrim(cPassFtp) )
If ! Empty( oFTP:hFTP )
FtpSendFiles ({"file1.txt","file2.txt","file3.txt"},{"destfile1.txt","destfile2.txt","destfile3.txt"},oFtp)
Endif
oInternet:End()
Return (nil)
Function FTPSendFiles ( aSource, aTarget, oFTP )
Local nBufSize:=4096
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( "Fichero no encontrado: " + aSource[ n ] )
exit
endif
hSource = FOpen( aSource[ n ] )
nTotSize += FSeek( hSource, 0, 2 )
FClose( hSource )
SysRefresh()
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
SysRefresh()
while ( nBytes := FRead( hSource, @cBuffer, nBufSize ) ) > 0
oFile:Write( SubStr( cBuffer, 1, nBytes ) )
SysRefresh()
end
FClose( hSource )
oFile:End()
next
return nil
Function FtpGetFiles( aSource, aTarget, oFTP, oSay )
Local nBufSize:=4096
local n
local hTarget
local cBuffer := Space( nBufSize )
local nBytes, nFile := 0, nTotal := 0
local nTotSize := 0
local oFile, aFiles, aSizes := {}
for n = 1 to Len( aSource )
aFiles = oFTP:Directory( aSource[ n ] )
if Len( aFiles ) > 0
AAdd( aSizes, aFiles[ 1 ][ 2 ] ) // first file, size
nTotSize += ATail( aSizes )
else
AAdd( aSizes, 0 )
endif
SysRefresh()
next
nFile := 0
for n = 1 to Len( aSource )
hTarget = FCreate( aTarget[ n ] )
oFile = TFtpFile():New( aSource[ n ], oFTP )
oFile:OpenRead()
SysRefresh()
while ( nBytes := Len( cBuffer := oFile:Read( nBufSize ) ) ) > 0
FWrite( hTarget, cBuffer, nBytes )
If oSay<>NIL
oSay:SetText ("- Recibiendo :"+Str(nFile+=nBytes)+" de "+Str(nTotSize))
Endif
SysRefresh()
end
FClose( hTarget )
oFile:End()
next
return nil
No deberias tener problemas.
Angel Salom
http://www.visionwin.com
---------------------------------------------
fwh 19.05 - harbour 3.2 - bcc 7.0
http://www.visionwin.com
---------------------------------------------
fwh 19.05 - harbour 3.2 - bcc 7.0
Porblemas FTP
Angel:
He probado el codigo que pones en el post, y me genera el siguiente error
Cannot Load WinINet.dll
He comprobado esta libreria y se encuentra tanto en: \WINDOWS\SYSTEM, como en \WINDOWS\SYSTEM32
¿Sabes que sucede?
Gracias de antemano
He probado el codigo que pones en el post, y me genera el siguiente error
Cannot Load WinINet.dll
He comprobado esta libreria y se encuentra tanto en: \WINDOWS\SYSTEM, como en \WINDOWS\SYSTEM32
¿Sabes que sucede?
Gracias de antemano
Yo estoy usando tFTP pero encontre problemas con versiones mas nuevas de FWH o xHarbour no pude identificar quien ocaciona el problema.
Asi que todo lo que consierne a tFTP utilizo las versiones:
C:\eduardo\fwh\ftp>make.exe -fmakex.dat
MAKE Version 5.2 Copyright 1987, 2000 Borland
c:\xHarfw24\bin\harbour.exe -p -n -m -es2 -gc0 -i.;c:\fw24h\include;c:\x
Harfw24\include -d__HARBOUR__ -dSYSTEMA .\SendFtp.prg -o.\SendFtp.c
xHarbour Compiler build 0.73.0 (SimpLex)
Copyright 1999-2002, http://www.xharbour.org http://www.harbour-project.org/
Compiling '.\SendFtp.prg' and generating preprocessed output to '.\SendFtp.ppo'.
..
Lines 752, Functions/Procedures 27
Generating C source output to '.\SendFtp.c'... Done.
c:\bcc55\bin\bcc32.exe -c -O2 -Ic:\xHarfw24\include;c:\bcc55\include -oo
bj\SendFtp.obj .\SendFtp.c
Borland C++ 5.5.1 for Win32 Copyright 1993, 2000 Borland
.\SendFtp.c:
c:\bcc55\bin\ilink32.exe -Gn -aa -Tpe -s
Espero te sea util
Asi que todo lo que consierne a tFTP utilizo las versiones:
C:\eduardo\fwh\ftp>make.exe -fmakex.dat
MAKE Version 5.2 Copyright 1987, 2000 Borland
c:\xHarfw24\bin\harbour.exe -p -n -m -es2 -gc0 -i.;c:\fw24h\include;c:\x
Harfw24\include -d__HARBOUR__ -dSYSTEMA .\SendFtp.prg -o.\SendFtp.c
xHarbour Compiler build 0.73.0 (SimpLex)
Copyright 1999-2002, http://www.xharbour.org http://www.harbour-project.org/
Compiling '.\SendFtp.prg' and generating preprocessed output to '.\SendFtp.ppo'.
..
Lines 752, Functions/Procedures 27
Generating C source output to '.\SendFtp.c'... Done.
c:\bcc55\bin\bcc32.exe -c -O2 -Ic:\xHarfw24\include;c:\bcc55\include -oo
bj\SendFtp.obj .\SendFtp.c
Borland C++ 5.5.1 for Win32 Copyright 1993, 2000 Borland
.\SendFtp.c:
c:\bcc55\bin\ilink32.exe -Gn -aa -Tpe -s
Espero te sea util
Eduardo Rizzolo
Eldorado Misiones Argentina
fullpaint@pinturas-misioneras.com.ar
Secundario:fullpaint@gmail.com
Grupo PuertoSUR
Telegram.@Fullpaint
Eldorado Misiones Argentina
fullpaint@pinturas-misioneras.com.ar
Secundario:fullpaint@gmail.com
Grupo PuertoSUR
Telegram.@Fullpaint