Hola Zorros!

Estoy atorado con este pinche control y no sé dónde la estoy errando. Tal
vez alguno se le ocurre como resolver el problema.

Les cuento que hice hasta aquí:

Encontré en internet un artículo que decía como utilizar el control. Hasta
aquí bien: lo pegué dentro de una clase y puse todas las funciones como
métodos de esa clase.

Básicamente hace esto:

1.       Genero unos archivos en formato csv.

2.       Cuando llego a una cantidad de archivos (digamos 5), usando molezip
los comprimo.

3.       Abro el ftp

4.       Transfiero el archivo al sito que tiene seteado.

5.       El archivo llega sin problemas en los primeros 2 loops. Pero cuando
quiero hacer un tercero, o más loops del proceso 1 al 5, “hace que
transfiere” es decir no da ningún error, pero los archivos no aparecen en el
FTP.

En que le estoy errando?

El código que uso es este:

 

 

                PROTECTED PROCEDURE PutFTP AS Boolean

                               LPARAMETERS lpFTPSite AS STRING,;

                                               lpUserName AS STRING,;

                                               lpPassWord AS STRING,;

                                               lpSourcePath AS STRING,;

                                               lpTargetPath AS STRING,;

                                               lpFileExtension AS STRING

 

                               LOCAL loBitesTransfered AS NUMBER

 

                               loBitesTransfered = -1

                               IF VARTYPE(lpFTPSite)="C" AND
!EMPTY(lpFTPSite);

                                                               AND
VARTYPE(lpUserName)="C" AND !EMPTY(lpUserName);

                                                              AND
VARTYPE(lpPassWord)="C" AND !EMPTY(lpPassWord);

                                                               AND
VARTYPE(lpSourcePath)="C" AND !EMPTY(lpSourcePath);

                                                               AND
VARTYPE(lpTargetPath)="C" AND !EMPTY(lpTargetPath);

                                                               AND
VARTYPE(lpFileExtension)="C" AND !EMPTY(lpFileExtension)

 

                                               #DEFINE GENERIC_READ
2147483648   && &H80000000

                                               #DEFINE GENERIC_WRITE
1073741824   && &H40000000

 

                                               PUBLIC hOpen, hFtpSession

                                               DECLARE INTEGER InternetOpen
IN wininet.DLL;

                                                               STRING
sAgent,;

                                                               INTEGER
lAccessType,;

                                                               STRING
sProxyName,;

                                                               STRING
sProxyBypass,;

                                                               STRING
lFlags

 

                                               DECLARE INTEGER
InternetCloseHandle IN wininet.DLL;

                                                               INTEGER hInet

 

                                               DECLARE INTEGER
InternetConnect IN wininet.DLL;

                                                               INTEGER
hInternetSession,;

                                                               STRING
sServerName,;

                                                               INTEGER
nServerPort,;

                                                               STRING
sUsername,;

                                                               STRING
sPassword,;

                                                               INTEGER
lService,;

                                                               INTEGER
lFlags,;

                                                               INTEGER
lContext

 

                                               DECLARE INTEGER FtpOpenFile
IN wininet.DLL;

                                                               INTEGER
hFtpSession,;

                                                               STRING
sFileName,;

                                                               INTEGER
lAccess,;

                                                               INTEGER
lFlags,;

                                                               INTEGER
lContext

 

                                               DECLARE INTEGER
InternetWriteFile IN wininet.DLL;

                                                               INTEGER
hFile,;

                                                               STRING  @
sBuffer,;

                                                               INTEGER
lNumBytesToWrite,;

                                                               INTEGER @
dwNumberOfBytesWritten

 

 

 

                                               ** Seleccionamos el servidor
FTP, con un nivel de acceso apropiado.

                                               ** No usar un acceso anónimo.

                                               IF THIS.connect2ftp
(lpFTPSite, lpUserName, lpPassWord)

                                                               lcSourcePath
= lpSourcePath                     && Directorio local

                                                               lcTargetPath
= lpTargetPath      && directorio de ftp destino

                                                               lnFiles =
ADIR (arr, lcSourcePath + "*."+lpFileExtension)

 

                                                               FOR lnCnt=1
TO lnFiles

 
lcSource = lcSourcePath + LOWER (arr [lnCnt, 1])

 
lcTarget = lcTargetPath + LOWER (arr [lnCnt, 1])

 
THIS.GrabarEnLog(lcSource + " -> " + lcTarget)

 
loBitesTransfered=THIS.local2ftp (hFtpSession, lcSource, lcTarget)

                                                               ENDFOR

                                                               SET STEP ON

                                                                 =
InternetCloseHandle (hFtpSession)

                                                               =
InternetCloseHandle (hOpen)

                                                               ** DEBE PASAR
LOS ARCHIVOS A PROCESADOS.

                                                               FOR lnCnt=1
TO lnFiles

 
THIS.MoverAProcesados(lcSourcePath,arr(lnCnt, 1))

                                                               ENDFOR

                                                               arr = .NULL.

 

                                               ENDIF

                               ENDIF

 

                               RETURN loBitesTransfered

                ENDPROC

                **--------------------------------------------

                ** Establecemos la conexión

                **--------------------------------------------

                PROTECTED PROCEDURE  connect2ftp (strHost, strUser, strPwd)

                               ** Abrimos el acceso.

                               hOpen = InternetOpen ("vfp", 1, 0, 0, 0)

 

                               IF hOpen = 0

 
THIS.GrabarEnLog(fnMessage(9))

                                               RETURN .F.

                               ENDIF

 

                               ** Conectando al FTP.

                               hFtpSession = InternetConnect (hOpen,
strHost, 0, strUser, strPwd, 1, 0, 0)

 

                               IF hFtpSession = 0

                                               ** Cerrando acceso y
saliendo.

                                               = InternetCloseHandle (hOpen)

 
THIS.GrabarEnLog(fnMessage(11)+ strHost )

                                               RETURN .F.

                               ELSE

 
THIS.GrabarEnLog(fnMessage(12))

                               ENDIF

                               RETURN .T.

                ENDPROC

 

                **--------------------------------------------

                ** Copia del/los archivos

                **--------------------------------------------

                PROTECTED PROCEDURE  local2ftp (hConnect, lcSource,
lcTarget)

                               LOCAL losw AS Logical

 

                               ** Copiando el archivo local al directorio
remoto ftp.

                               hSource = FOPEN (lcSource)

                               IF (hSource = -1)

                                               RETURN -1

                               ENDIF

 

                               ** Creamos el nuevo archivo

                               hTarget = FtpOpenFile(hConnect, lcTarget,
GENERIC_WRITE, 2, 0)

                               IF hTarget = 0

                                               = FCLOSE (hSource)

                                               RETURN -2

                               ENDIF

                               lnBytesWritten = 0

                               lnChunkSize =THIS.FTPChunkSize      &&
128,256, 512

                               DO WHILE NOT FEOF(hSource)

                                               lcBuffer = FREAD (hSource,
lnChunkSize)

                                               lnLength = LEN(lcBuffer)

                                               IF lnLength > 0

                                                               IF
InternetWriteFile (hTarget, @lcBuffer, lnLength, @lnLength) = 1

 
lnBytesWritten = lnBytesWritten + lnLength

 
** Podemos mostrar aquí el progreso de la operación

                                                               ELSE

 
EXIT

                                                               ENDIF

                                               ELSE

                                                               EXIT

                                               ENDIF

                               ENDDO

                               SET STEP ON

                               = InternetCloseHandle (hTarget)

                               = FCLOSE (hSource)

                               RETURN  lnBytesWritten

                ENDPROC

 

Desde ya gracias!

 

m.

Responder a