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.