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 (&sConInfo, &phWebConnection) == S_OK)
{
unsigned int k;
for (k = 0; k < 8; k ++)
{
ConnMgrConnectionStatus(phWebConnection,&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
&&asignamos los valores a las variables que se van a usar
usuario:= 'usuariol' &&usuario definido en el ftp
contrasena:= 'contrasena' &&contrase帽a de acceso para ese usuario en el ftp
fichero_subida:= ('borrados.txt') &&ruta y nombre del fichero que se quiere subir
fichero_bajada:= ('\\ipftp\borrados.txt') &&ruta y nombre del fichero que se quiere bajar
ip_ftp:= 'aqui va la ip del ftp'
aux=GPRSCONNECT() &&establecemos la conexi贸n
hInternet := InternetOpen( "Anystring", INTERNET_OPEN_TYPE_DIRECT, 0, 0, 0 )
&&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
&&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 )
&&en hCon nos devuelve un valor que si es cero indica que ha ocurrido un error durante la conexi贸n
&&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
&&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
&&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.