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.