Página 1 de 1
FTPFile
Publicado: Lun Sep 04, 2017 7:13 pm
por ortega.antonio
Buenas, alguien tiene un ejemplo de FTPFile ? .... porque el enlace en el blog de xailer, donde está el fuente para ver los metodos disponibles está roto.
Gracias,
Antonio.
Re: FTPFile
Publicado: Mar Sep 05, 2017 10:21 am
por ignacio
Buenos días,
Es muy probable que el siguiente código no funcione más que con Xailer 4 o posterior.
Un saludo
Nota: Los métodos incluidos tienen la gran ventaja de que muestran el progreso de la operación.
Código: Seleccionar todo
WITH OBJECT ::oFtp := TFtp():Create( Self )
:cUser := ::oEdUser:cText
:cPassword := ::oEdClave:cText
:lPassive := .T.
IF !:Open() .OR. !:Connect( ::oEdServer:cText )
MsgInfo( "No se pudo conectar con el servidor FTP, proceso abortado" )
:Close()
RETURN .f.
ENDIF
END WITH
Código: Seleccionar todo
METHOD FTPSendFile( cSrcFile, cTrgFile ) CLASS TFrmCopiasSeg
LOCAL cBuffer
LOCAL nSize, nLen
LOCAL hSrcFile, hTrgFile
LOCAL lExito
IF ::oFtp == NIL
MsgInfo( "Conexión FTP no preparada" )
RETURN .F.
ENDIF
cBuffer := Space( BUFFER_FTP )
nSize := FileSize( cSrcFile )
nLen := BUFFER_FTP
hTrgFile := ::oFtp:OpenFileWrite( cTrgFile )
lExito := .T.
IF hTrgFile <= 0
MsgInfo( "Error de apertura de fichero remoto: " + cTrgFile )
RETURN .F.
ENDIF
hSrcFile := FOpen( cSrcFile, 0 )
WITH OBJECT ::oPgBar
:nMax := Int( nSize / BUFFER_FTP )
:nValue := 0
END WITH
::lWorking := .T.
WITH OBJECT ::oFtp
DO WHILE nLen == BUFFER_FTP
nLen := FRead( hSrcFile, @cBuffer, BUFFER_FTP )
IF ::lStop
MsgInfo( "Proceso cancelado por el usuario" )
lExito := .f.
::lStop := .f.
EXIT
ENDIF
IF nLen > 0 .AND. !:WriteFile( hTrgFile, cBuffer, nLen )
MsgInfo( "Error de comunicaciones. Fichero no grabado correctamente." )
lExito := .f.
EXIT
ENDIF
::oPgBar:nValue ++
ProcessMessages()
ENDDO
:CloseFile( hTrgFile )
END WITH
FClose( hSrcFile )
::lWorking := .F.
IF !lExito
::oPgBar:nValue := 0
ENDIF
RETURN lExito
Código: Seleccionar todo
METHOD FTPReceiveFile( cSrcFile, cTrgFile ) CLASS TFrmCopiasSeg
LOCAL cBuffer
LOCAL nSize, nLen
LOCAL hSrcFile, hTrgFile
LOCAL lExito
IF ::oFtp == NIL
MsgInfo( "Conexión FTP no preparada" )
RETURN .F.
ENDIF
cBuffer := Space( BUFFER_FTP )
hSrcFile := ::oFtp:OpenFileRead( cSrcFile )
lExito := .T.
IF hSrcFile <= 0
MsgInfo( "Error de apertura de fichero remoto: " + cSrcFile )
RETURN .F.
ENDIF
FErase( cTrgFile )
nSize := ::oFtp:GetFileSize( hSrcFile )
nLen := BUFFER_FTP
hTrgFile := FCreate( cTrgFile, 0 )
WITH OBJECT ::oPgBar
:nMax := Int( nSize / BUFFER_FTP )
:nValue := 0
END WITH
::lWorking := .T.
WITH OBJECT ::oFtp
DO WHILE nLen == BUFFER_FTP
IF ::lStop
MsgInfo( "Proceso cancelado por el usuario" )
lExito := .f.
::lStop := .f.
EXIT
ENDIF
IF nSize <= 0
EXIT
ENDIF
IF !:ReadFile( hSrcFile, @cBuffer, @nLen )
MsgInfo( "Error de comunicaciones. Fichero no recuperado correctamente." )
lExito := .f.
EXIT
ENDIF
nSize -= nLen
IF nLen > 0 .and. FWrite( hTrgFile, cBuffer, nLen ) != nLen
MsgInfo( "Error de escritura en fichero local. Fichero no recuperado correctamente." )
lExito := .f.
EXIT
ENDIF
::oPgBar:nValue ++
ProcessMessages()
ENDDO
:CloseFile( hSrcFile )
END WITH
FClose( hTrgFile )
::lWorking := .F.
IF !lExito
::oPgBar:nValue := 0
ENDIF
RETURN lExito
Re: FTPFile
Publicado: Jue Sep 07, 2017 2:38 pm
por ortega.antonio
Gracias Ignacio, era lo que necesitaba.
Saludos.