Subir y descargar archivos por FTP.

 

 

Por: Demian Panello.

 

MFC ofrece un amplio framework para el desarrollo de aplicaciones para Internet y redes en general.

Especificamente sobre Internet se pueden aprovechar un conjunto de clases MFC que envuelven la funcionalidad de diferentes protocolos usados en la gran red.

 

 

Además de estas existen otras clases para HTML agrupadas como "Internet Server API" y que a diferencias de las listadas arriba, no son derivadas de CObject.

 

¿Cómo usar estas clases?

 

Tomemos como ejemplo el objeto CFtpConnection.

 

Incluir en stdafx.h -> #include <afxinet.h>

 

1) Se necesitan los siguientes objetos:

 

        - CInternetSession               -> Ejemplo: CInternetSession is;

        - Un puntero a CFtpConnection    -> Ejemplo: CFtpConnection* pftp;

 

2) Como los métodos de estos objetos pueden fallar, a causa de por ejemplo, una conexión a internet inexistente, o una abrupta desconexión, se deben escribir las rutinas entre bloques try - catch para capturar el error:

 

try

{

 ... código susceptible de fallar aquí

}

catch( CInternetException* pEX)

{

 ... manejo de error aquí

 

 El objeto pEX de tipo CInternetException viene con información acerca del error.

}

 

 

Dicho esto, entonces dentro del bloque try se trata de establecer una conexión FTP usando el método GetFtpConnection del objeto CInternetSession.

 

pftp = is.GetFtpConnection("ftp.direccion.com", "Nomusuario", "Password");

 

if (pftp == NULL)

{

 // No hay conexión a Internet.

}

else

{

 // Conectado.

 // Continuar con el punto 3)

}

 

3) Una vez conectado al servidor FTP, se puede hacer lo siguiente:

 

    - Crear un directorio remoto:

        

        pftp->CreateDirectory("Midirectorio");

 

    - Establecer el directorio remoto actual:

 

        pftp->SetCurrentDirectory("Midirectorio");

 

    - Enviar archivos al directorio remoto actual:

 

        if ( !pftp->PutFile("nombre archivo origen", "nombre archivo destino") )

        {

            // Si no se puede se cierra la conexión.

            pftp->Close();

            

            is.Close();

 

        }

 

    - Descargar archivos desde el directorio remoto al directorio local actual:

 

        if ( !pftp->GetFile("Nombre archivo remoto", "Nombre archivo local", FALSE) )

        {

            // Si no se puede se cierra la conexión.

            pftp->Close();

 

            is.Close();

 

        }

 

    - Eliminar archivos del servidor:

 

        pftp->Remove("nombre archivo");

 

4) Luego de hacer todas las operaciones hay que cerrar la conexión, cerrando la sesión FTP  y CInternetSession:

 

        pftp->Close();

        is.Close();

 

A continuación puede descargar una aplicación Dialog Based que ejemplifica algunos de estos métodos.

 

 

Descargar fuente del ejemplo: FTPsample.rar (70 Kb).

Volver a la página principal