Page 1 of 1

PROBLEMAS CON FTP

PostPosted: Mon May 29, 2006 12:24 pm
by infosys
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

PostPosted: Mon May 29, 2006 3:58 pm
by mag071
Yo he usado con exito la clase tFtp partiendo de un ejemplo que esta en FWH

\FWH\SAMPLES\GALLERY\ICOPYFIL

Verifica ese directorio

PostPosted: Mon May 29, 2006 4:18 pm
by infosys
Gracias Mario, no lo habia visto, lo probare.

PostPosted: Mon May 29, 2006 8:38 pm
by AngelSalom
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.

Porblemas FTP

PostPosted: Tue May 30, 2006 6:48 pm
by txon
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

PostPosted: Wed May 31, 2006 11:41 pm
by infosys
Gracias por las Recomendaciones, efectivamente use la clase TFTP y me resulta excelente, pude resolver mi problema

Gracias a todos por la ayuda

PostPosted: Thu Jun 01, 2006 3:33 pm
by fullpaint
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