FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Pocket PC Problema con al descargar un fichero por ftp
Posts: 233
Joined: Wed Aug 09, 2006 03:07 PM

Problema con al descargar un fichero por ftp

Posted: Thu Nov 20, 2008 11:18 AM

Hola a todos....

Tengo el siguiente codigo en el cual la subida de ficheros al ftp me funciona perfectamente, pero cuando intento descargarme algun fichero, este me lo pone en la pda (procedente del ftp) pero cuando termina la aplicaci贸n autom谩ticamente me lo elimina, 驴por que?

El c贸digo por si alguien puede echarme una mano es el siguiente:

include <FWCE.ch>

include <sql.ch>

&&Codigo de declaraci贸n para env铆o por GPRS

define FILE_ATTRIBUTE_READONLY 1

define FILE_ATTRIBUTE_HIDDEN 2

define FILE_ATTRIBUTE_SYSTEM 4

define FILE_ATTRIBUTE_DIRECTORY 16

define FILE_ATTRIBUTE_ARCHIVE 32

define FILE_ATTRIBUTE_NORMAL 128

define FILE_ATTRIBUTE_TEMPORARY 256

//
// access types for InternetOpen()
//

define INTERNET_OPEN_TYPE_PRECONFIG 0 // use registry configuration

define INTERNET_OPEN_TYPE_DIRECT 1 // direct to net

define INTERNET_OPEN_TYPE_PROXY 3 // via named proxy

define INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY 4 // prevent using java/script/INS

//
// manifests
//

define INTERNET_INVALID_PORT_NUMBER 0 // use the protocol-specific default

define INTERNET_DEFAULT_FTP_PORT 21 // default for FTP servers

define INTERNET_DEFAULT_GOPHER_PORT 70 // " " gopher "

define INTERNET_DEFAULT_HTTP_PORT 80 // " " HTTP "

define INTERNET_DEFAULT_HTTPS_PORT 443 // " " HTTPS "

define INTERNET_DEFAULT_SOCKS_PORT 1080 // default for SOCKS firewall servers.

//
// service types for InternetConnect()
//

define INTERNET_SERVICE_FTP 1

define INTERNET_SERVICE_GOPHER 2

define INTERNET_SERVICE_HTTP 3

//
// flags for FTP
//

define INTERNET_FLAG_TRANSFER_ASCII 1

define INTERNET_FLAG_TRANSFER_BINARY 2

pragma BEGINDUMP

include "windows.h"

include "wininet.h"

include "hbapi.h"

include "initguid.h"

include "connmgr.h"

LPWSTR AnsiToWide( LPSTR );

HB_FUNC( INTERNETOPEN )
{
LPWSTR cAgent = AnsiToWide( hb_parc( 1 ) );
LPWSTR cProxyName = AnsiToWide( hb_parc( 3 ) );
LPWSTR cProxyBypass = AnsiToWide( hb_parc( 4 ) );

HINTERNET hInternet = InternetOpen( cAgent, hb_parnl( 2 ), cProxyName, cProxyBypass, hb_parnl( 5 ) );

hb_xfree( cAgent ); 
hb_xfree( cProxyName ); 
hb_xfree( cProxyBypass );

hb_retnl( ( LONG ) hInternet );

}

HB_FUNC( INTERNETCLOSEHANDLE )
{
hb_retl( InternetCloseHandle( ( HINTERNET ) hb_parnl( 1 ) ) );
}

HB_FUNC( INTERNETCONNECT )
{
LPWSTR cServerName = AnsiToWide( hb_parc( 2 ) );
LPWSTR cUserName = AnsiToWide( hb_parc( 4 ) );
LPWSTR cPassword = AnsiToWide( hb_parc( 5 ) );

HINTERNET hInternet = InternetConnect( ( HINTERNET ) hb_parnl( 1 ), cServerName, ( INTERNET_PORT ) hb_parnl( 3 ), cUserName, cPassword, hb_parnl( 6 ), hb_parnl( 7 ), hb_parnl( 8 ) );

hb_xfree( cServerName ); 
hb_xfree( cUserName ); 
hb_xfree( cPassword );

hb_retnl( ( LONG ) hInternet );

}

HB_FUNC( FTPGETFILE )
{
LPWSTR cRemoteFile = AnsiToWide( hb_parc( 2 ) );
LPWSTR cNewFile = AnsiToWide( hb_parc( 3 ) );

hb_retl( FtpGetFile( ( HINTERNET ) hb_parnl( 1 ), cRemoteFile, cNewFile, hb_parl( 4 ), hb_parnl( 5 ), hb_parnl( 6 ), hb_parnl( 7 ) ) );

hb_xfree( cRemoteFile ); 
hb_xfree( cNewFile );

}

HB_FUNC( FTPPUTFILE )
{
LPWSTR cLocalFile = AnsiToWide( hb_parc( 2 ) );
LPWSTR cNewRemoteFile = AnsiToWide( hb_parc( 3 ) );

hb_retl( FtpPutFile( ( HINTERNET ) hb_parnl( 1 ), cLocalFile, cNewRemoteFile, hb_parnl( 4 ), hb_parnl( 5 ) ) );

hb_xfree( cLocalFile ); 
hb_xfree( cNewRemoteFile );

}

HB_FUNC (GPRSCONNECT)
{
HANDLE phWebConnection = NULL;
DWORD pdwStatus = 0;
ConnMgrConnectionStatus (phWebConnection, &pdwStatus);
if (pdwStatus == CONNMGR_STATUS_CONNECTED)
{
hb_retnl( (long) 0 );
}
else
{
CONNMGR_CONNECTIONINFO sConInfo;
memset (&sConInfo,0, sizeof (CONNMGR_CONNECTIONINFO));
sConInfo.cbSize = sizeof (CONNMGR_CONNECTIONINFO);
sConInfo.dwParams = CONNMGR_PARAM_GUIDDESTNET;
sConInfo.dwPriority = CONNMGR_PRIORITY_USERINTERACTIVE;
sConInfo.dwFlags = CONNMGR_FLAG_PROXY_HTTP;
sConInfo.bExclusive = TRUE ;
sConInfo.bDisabled = FALSE;
sConInfo.guidDestNet = IID_DestNetInternet;

 if (ConnMgrEstablishConnection (&amp;sConInfo, &amp;phWebConnection) == S_OK)
 {
    unsigned int k;
    for (k = 0; k &lt; 8; k ++)
    {
       ConnMgrConnectionStatus(phWebConnection,&amp;pdwStatus);
       if (pdwStatus == CONNMGR_STATUS_CONNECTED)
       {
          hb_retnl( (long) phWebConnection );
       }
       if (pdwStatus == CONNMGR_STATUS_CONNECTIONCANCELED || pdwStatus == CONNMGR_STATUS_WAITINGCONNECTIONABORT)
       {
          hb_retnl( (long) -1 );
       }
       Sleep (2500);
    }
    hb_retnl( (long) phWebConnection );
 }
 else
 {
    hb_retnl( (long) -1 );
 }

}
}
HB_FUNC (GPRSRELEASE)
{
HANDLE hCon= NULL;
ConnMgrReleaseConnection( ( HANDLE ) hb_parnl( 1 ),2 );
}

pragma ENDDUMP


  • CUERPO PRINCIPAL *

FUNCTION Main()

LOCAL ruta_local,ruta_destino
PUBLIC tipo

DEFINE dialog oWnd resource "FTP"

    redefine say id 1000 of oWnd
    redefine say id 2000 of oWnd
    redefine get oget1 var ruta_local id 110 of oWnd 
    redefine get oget2 var ruta_destino id 120 of oWnd
    redefine button id 100 of oWnd action (tipo:='enviar',envio(tipo))
    redefine button id 200 of oWnd action (tipo:='recibir',envio(tipo))

ACTIVATE dialog oWnd

RETURN nil


FUNCTION envio()


LOCAL usuario,contrasena,ip_ftp,fichero_subida,fichero_bajada

&amp;&amp;asignamos los valores a las variables que se van a usar
usuario:= 'usuariol'     &amp;&amp;usuario definido en el ftp
contrasena:= 'contrasena'  &amp;&amp;contrase帽a de acceso para ese usuario en el ftp
fichero_subida:= ('borrados.txt')    &amp;&amp;ruta y nombre del fichero que se quiere subir
fichero_bajada:= ('\\ipftp\borrados.txt')    &amp;&amp;ruta y nombre del fichero que se quiere bajar
ip_ftp:= 'aqui va la ip del ftp'

    aux=GPRSCONNECT()   &amp;&amp;establecemos la conexi贸n
    hInternet := InternetOpen( "Anystring", INTERNET_OPEN_TYPE_DIRECT, 0, 0, 0 ) 
    &amp;&amp;en hInternet nos devuelve un valor que si es cero indica que no se ha podido establecer
    IF hINTERNET = 0 
       INTERNETCLOSEHANDLE( hInternet ) 
       GPRSRELEASE(aux)
       MSGSTOP("Error en la conexi贸n de internet","Error") 
       RETURN NIL 
    ENDIF

    &amp;&amp;Una vez establecida la conexi贸n con internet realizamos la conexi贸n con el ftp
    hCon = INTERNETCONNECT( hInternet, ip_ftp,0, usuario,contrasena, INTERNET_SERVICE_FTP, 0,0 ) 
    &amp;&amp;en hCon nos devuelve un valor que si es cero indica que ha ocurrido un error durante la conexi贸n
    &amp;&amp;con el ftp. El error puede ser debido a que el usuario y/o la contrase帽a son erroneas
    IF HCON = 0 
       INTERNETCLOSEHANDLE( hCon ) 
       INTERNETCLOSEHANDLE( hInternet ) 
       GPRSRELEASE(aux)
       MSGSTOP("Error en la conexi贸n FTP","Error") 
       RETURN NIL 
    ENDIF

    &amp;&amp;controlamos si lo que queremos hacer es enviar o recibir
    IF tipo='enviar'
        FTPPUTFILE( hCon, fichero_subida, 'borrados.txt', 0, 0 ) 
        MsgInfo("Archivo enviado con 茅xito","Informaci贸n")

    ELSE
        FTPGETFILE( hCon, fichero_bajada, (CURDIR()+'\borrados_2.txt'),0,FILE_ATTRIBUTE_ARCHIVE,0,0 ) 
        MsgInfo("Archivo recibido con 茅xito","Informaci贸n")

    ENDIF

    &amp;&amp;liberamos la conexi贸n para que no siga activa
    INTERNETCLOSEHANDLE( hCon ) 
    INTERNETCLOSEHANDLE( hInternet ) 
    GPRSRELEASE(aux)
    msginfo('Aplicaci贸n finalizada')

RETURN nil

Nota: este es todo el codigo y el problema lo tengo en la funcion ftpgetfile()

Saludos y gracias....
El铆as Torres.

Posts: 682
Joined: Tue Feb 14, 2006 09:48 AM

Problema con al descargar un fichero por ftp

Posted: Fri Nov 21, 2008 02:35 PM

Hola Elias, cuando dices que te lo descarga y luego te lo borra, como lo compruebas?. Detienes la aplicacion y desde el explorardor de archivos puedes ver el fichero descargado?

Es estra帽o, el codigo parece correcto. Si tu FTP es un servidor con Linux, debes tener en cuenta las mayusculas y minusculas, en el envio no lo notaras puesto que lo grabara tal cual lo envies, pero en la recepcion si no coincide exactamente, no te descargara el fichero. Es lo 煤nico que se me ocurre.

Saludos desde Mallorca
Biel Maim贸
http://bielsys.blogspot.com/
Posts: 6
Joined: Mon Nov 10, 2008 12:18 PM

Problema con al descargar un fichero por ftp

Posted: Fri Nov 21, 2008 07:35 PM

Buenas tardes, primero presentarme, soy compa帽era de trabajo de Elias.

Biel, a lo que se refiere Elias es que cuando lanz贸 la aplicaci贸n sobre su HTC Touch el pudo ver como si efectivamente obtuviera el fichero, pero que una vez finaliz贸 la ejecuci贸n este fichero despareci贸 del dispositivo m贸vil.

En realidad nos preocupa m谩s que la aplicaci贸n debe correr sobre otro dispositivo OptimusPDA SP5721 de Metrologic con Windows CE y al lanzar el ejecutable en este dispositivo da el siguiente error:

"Cannot find 'prueba_ftp' (or one of its components). Make sure the path and filename are correct and that all the required libraries are available."

驴Pudiera ser problema del SO del dispositivo? probando sobre el emulador de Windows Mobile, la aplicaci贸n funciona, al igual que con el m贸vil de Elias.

Cualquier ayuda sera bien recibida, gracias de antemano.

Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

Problema con al descargar un fichero por ftp

Posted: Fri Nov 21, 2008 07:46 PM
Corina,

> con Windows CE

Para que funcione correctamente en Windows CE hay que hacer lo siguiente:

1. No enlazar aygshell.lib al construir el EXE.

2. Anadir este codigo al PRG principal para que se pueda construir el EXE:
#pragma BEGINDUMP

void SHCreateMenuBar( void ) {}
void SHFindMenuBar( void ) {}
void SHDoneButton( void ) {}
void SHFullScreen( void ) {}
void SHSipInfo( void ) {}
void SHRecognizeGesture( void ) {}

#pragma ENDDUMP
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

Problema con al descargar un fichero por ftp

Posted: Sat Nov 22, 2008 01:41 AM

Comprueba que valor te devuelve la llamada a la funcion:

MsgInfo( FTPGETFILE( hCon, fichero_bajada, (CURDIR()+'\borrados_2.txt'),0,FILE_ATTRIBUTE_ARCHIVE,0,0 ) )

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 6
Joined: Mon Nov 10, 2008 12:18 PM

Problema con al descargar un fichero por ftp

Posted: Mon Nov 24, 2008 10:03 AM

Buenas,

Que hay Antonio, prob茅 con lo que me indicaste, en el buildce.bat coment茅 la l铆nea donde se enlazaba con la librer铆a aygshell.lib y si miras el c贸digo que peg贸 Elias, justo debajo de los primeros includes le puse el c贸digo que me dejaste.

Compil茅 de nuevo y se gener贸 el exe sin problemas pero sigue saliendo el mismo error cuando se lanza la aplicaci贸n sobre el dispositivo.

No se porque me da que en la pda me falta alguna librer铆a...

Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

Problema con al descargar un fichero por ftp

Posted: Mon Nov 24, 2008 01:35 PM

Corina,

Descarga esta utilidad:

www.fivetechsoft.com/files/software/peinfo.exe

Y usala en tu PC para inspeccionar el EXE para el Pocket PC, y podr谩s comprobar que DLLs externas usa, y asi ver cual es la que no tiene Windows CE. Tienes que mirar en la opci贸n "imports".

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 6
Joined: Mon Nov 10, 2008 12:18 PM

Problema con al descargar un fichero por ftp

Posted: Mon Nov 24, 2008 05:59 PM

Buenas Antonio,

Pues me da que la cosa va a estar algo complicada, segu铆 tus indicaciones e utiliz茅 el peinfo.exe para ver que dlls se utilizan y resulta que me aparece la "cellcore.dll" que en el windows ce version 5.00 no existe.

Navegando por internet descubro que dicha dll es para Windows Mobile y que al parecer reside en la ROM de la pda. Tambien he visto que esta dll se incorpora en la versi贸n 6 del Windows CE, as铆 que no se que hacer ahora.

En fin,... a ver como lo solucionamos.

Gracias por la ayuda

Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

Problema con al descargar un fichero por ftp

Posted: Mon Nov 24, 2008 09:46 PM

Corina,

Has visto con peinfo.exe que funciones de "cellcore.dll" estas usando ?

M谩s fac铆l, no enlaces cellcore.lib y asi te saldr谩n las funciones que usas de ella. A ver como podemos reeemplazarlas :-)

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 6
Joined: Mon Nov 10, 2008 12:18 PM

Problema con al descargar un fichero por ftp

Posted: Tue Nov 25, 2008 10:18 AM

Las funciones que se utilizan son las de la conexion.

ConnMgrConnectionStatus
ConnMgrEstablishConnection
ConnMgrReleaseConnection

He estado mirando por internet y hablan de RAS (Remote Access Service) para establecer una conexion GPRS, pero no lo tengo muy claro, voy a seguir mirando a ver que encuentro para poder substituir el tema de la conexi贸n.

Un saludo

Continue the discussion