Actualizar el programa desde FTP.

Post Reply
FiveWiDi
Posts: 910
Joined: Mon Oct 10, 2005 2:38 pm

Actualizar el programa desde FTP.

Post by FiveWiDi »

Hola a todos,

Estoy intentando usar una rutina de Biel Maimó (muchas gracias Biel !!) para actualizar el programa que he desarrollado a través de una conexión FTP.

El caso es que la rutina de Biel me da estos errores al compilar:

c:\desarrol\treball\Ampa1507\obj\UPDATE00.c:
Warning W8075 c:\\desarrol\\treball\\Ampa1507\\prg\\arquitec\\UPDATE00.PRG 151:
Suspicious pointer conversion in function HB_FUN_FILETIMES
Warning W8065 c:\\desarrol\\treball\\Ampa1507\\prg\\arquitec\\UPDATE00.PRG 152:
Call to function 'ISNUM' with no prototype in function HB_FUN_FILETIMES
Error E2227 c:\\desarrol\\treball\\Ampa1507\\prg\\arquitec\\UPDATE00.PRG 183: Ex
tra parameter in call to hb_storni in function HB_FUN_FILETIMES
Error E2227 c:\\desarrol\\treball\\Ampa1507\\prg\\arquitec\\UPDATE00.PRG 184: Ex
tra parameter in call to hb_storni in function HB_FUN_FILETIMES
Error E2227 c:\\desarrol\\treball\\Ampa1507\\prg\\arquitec\\UPDATE00.PRG 185: Ex
tra parameter in call to hb_storni in function HB_FUN_FILETIMES
Error E2227 c:\\desarrol\\treball\\Ampa1507\\prg\\arquitec\\UPDATE00.PRG 186: Ex
tra parameter in call to hb_storni in function HB_FUN_FILETIMES
Error E2227 c:\\desarrol\\treball\\Ampa1507\\prg\\arquitec\\UPDATE00.PRG 187: Ex
tra parameter in call to hb_storni in function HB_FUN_FILETIMES
Error E2227 c:\\desarrol\\treball\\Ampa1507\\prg\\arquitec\\UPDATE00.PRG 188: Ex
tra parameter in call to hb_storni in function HB_FUN_FILETIMES
Warning W8065 c:\\desarrol\\treball\\Ampa1507\\prg\\arquitec\\UPDATE00.PRG 208:
Call to function 'ISNUM' with no prototype in function HB_FUN_FILESIZE
*** 6 errors in Compile ***

línea 151 LPSTR cFileName = hb_parc( 1 ) ;
línea 152 int nTime = ( ISNUM( 2 ) ? hb_parni( 2 ) : 1 ) ; // defaults to 1
línea 183 hb_storni( stTime.wYear, -1, 1 ) ;
línea 184, 185, 186, 187 y 188 similares a la 183

El código es:

Code: Select all

#pragma BEGINDUMP
#include <Windows.h>
#include <mapiwin.h>
#include <hbApi.h>
                     //nTime 1=Last Update, 2=Last Acces, 3=Creation, defecto last update
HB_FUNC( FILETIMES ) // params cFileName, nTime --> { nYear, nMonth, nDay, nHour, nMin, nSec }
{
   LPSTR cFileName = hb_parc( 1 ) ;
   int nTime       = ( ISNUM( 2 ) ? hb_parni( 2 ) :  1 ) ; // defaults to 1

   FILETIME ftCreate, ftAccess, ftWrite ;
   SYSTEMTIME stTime ;
   BOOL bRet ;
   HANDLE hFile = CreateFile( cFileName, GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0 ) ;

   if( ! hFile )
      return ;

   GetFileTime( (HANDLE) hFile, &ftCreate, &ftAccess, &ftWrite ) ;

   switch( nTime )
   {
      case 1 : // last update
         FileTimeToSystemTime( &ftWrite, &stTime ) ;
         break ;
      case 2 : // last access
         FileTimeToSystemTime( &ftAccess, &stTime ) ;
         break ;
      case 3 : // creation
         FileTimeToSystemTime( &ftCreate, &stTime ) ;
         break ;
      default : // last update
         FileTimeToSystemTime( &ftWrite, &stTime ) ;
         break ;
   }

   SystemTimeToTzSpecificLocalTime( NULL, &stTime, &stTime ) ;
   CloseHandle( hFile ) ;
   hb_reta( 6 ) ;
   hb_storni( stTime.wYear,   -1, 1 ) ;
   hb_storni( stTime.wMonth,  -1, 2 ) ;
   hb_storni( stTime.wDay,    -1, 3 ) ;
   hb_storni( stTime.wHour,   -1, 4 ) ;
   hb_storni( stTime.wMinute, -1, 5 ) ;
   hb_storni( stTime.wSecond, -1, 6 ) ;
}
 
Que está mal y cómo se arregla?

Muchas gracias,
Un Saludo
Carlos G.

FiveWin 19.06 + Harbour 3.2, BCC 7 Windows 10
oliveiros junior
Posts: 84
Joined: Tue Mar 20, 2007 3:13 pm

Re: Actualizar el programa desde FTP.

Post by oliveiros junior »

Olá,

Procure por uma rotina do José Javier Lloris - PFtp ela mostra tudo como fazer ftp de uma arquivo. Bastante detalhada.

Att.,

Oliveiros Junior
User avatar
cnavarro
Posts: 5792
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Actualizar el programa desde FTP.

Post by cnavarro »

Carlos, prueba asi

Code: Select all


#pragma BEGINDUMP

#include <windows.h>
#include "hbapi.h"
//#include "hbapierr.h"
//#include "hbapifs.h"

                     //nTime 1=Last Update, 2=Last Acces, 3=Creation, defecto last update
HB_FUNC( FILETIMES ) // params cFileName, nTime --> { nYear, nMonth, nDay, nHour, nMin, nSec }
{
   LPSTR cFileName = ( LPSTR ) hb_parc( 1 ) ;
   int nTime       = ( HB_ISNUM( 2 ) ? hb_parni( 2 ) :  1 ) ; // defaults to 1

   FILETIME ftCreate, ftAccess, ftWrite ;
   SYSTEMTIME stTime ;
   BOOL bRet ;
   HANDLE hFile = CreateFile( cFileName, GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0 ) ;

   if( ! hFile )
      return ;

   GetFileTime( (HANDLE) hFile, &ftCreate, &ftAccess, &ftWrite ) ;

   switch( nTime )
   {
      case 1 : // last update
         FileTimeToSystemTime( &ftWrite, &stTime ) ;
         break ;
      case 2 : // last access
         FileTimeToSystemTime( &ftAccess, &stTime ) ;
         break ;
      case 3 : // creation
         FileTimeToSystemTime( &ftCreate, &stTime ) ;
         break ;
      default : // last update
         FileTimeToSystemTime( &ftWrite, &stTime ) ;
         break ;
   }

   SystemTimeToTzSpecificLocalTime( NULL, &stTime, &stTime ) ;
   CloseHandle( hFile ) ;
   hb_reta( 6 ) ;
   hb_storvni( stTime.wYear,   -1, 1 ) ;
   hb_storvni( stTime.wMonth,  -1, 2 ) ;
   hb_storvni( stTime.wDay,    -1, 3 ) ;
   hb_storvni( stTime.wHour,   -1, 4 ) ;
   hb_storvni( stTime.wMinute, -1, 5 ) ;
   hb_storvni( stTime.wSecond, -1, 6 ) ;
}
 
#pragma ENDDUMP
 
Aunque no sé si te servirán, también tienes las funciones

Code: Select all

? FDate( cFile ), FTime( cFile )
 
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
FiveWiDi
Posts: 910
Joined: Mon Oct 10, 2005 2:38 pm

Re: Actualizar el programa desde FTP.

Post by FiveWiDi »

Gracias Cristobal,

Al final he optado por no usar esta función.

Esta función en el código de Biel se utiliza para obtener la fecha y hora de la versión que está disponible en la red, y con ello saber si es más actual que la que se está ejecutando.

Entiendo que esto implica que sólo puede haber una actualización disponible en la red, con lo cual las versiones distribuídas en los usuarios se actualizarían directamente a esta última versión.

Yo he optado por que el nombre de la distribución contenga el número de versión, con lo cual puede haber 'n' actualizaciones disponibles en la red y con ello iría actualizando paso a paso; pero claro si uso la manera de Biel de comprobar la fecha del fichero, cuando bajo éste desde la red a local, la fecha será la del momento de bajada, y esta fecha sería siempre superior al resto de versiones que quedan disponibles para actualizar en la red.

Creo que me he enrollado; es viernes y las neuronas van como quieren.

Buen fin de semana,
Un Saludo
Carlos G.

FiveWin 19.06 + Harbour 3.2, BCC 7 Windows 10
Post Reply