In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

FTPFile

Foro público de Xailer en español
Responder
ortega.antonio
Mensajes: 6
Registrado: Lun Sep 04, 2017 6:14 pm

FTPFile

Mensaje 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.
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9447
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Re: FTPFile

Mensaje 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
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
ortega.antonio
Mensajes: 6
Registrado: Lun Sep 04, 2017 6:14 pm

Re: FTPFile

Mensaje por ortega.antonio »

Gracias Ignacio, era lo que necesitaba.

Saludos.
Responder