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 (&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.
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.