Page 1 of 1

Actualizar el programa desde FTP.

PostPosted: Fri Feb 23, 2018 10:58 pm
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  Expand view
#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,

Re: Actualizar el programa desde FTP.

PostPosted: Wed Feb 28, 2018 1:10 pm
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

Re: Actualizar el programa desde FTP.

PostPosted: Wed Feb 28, 2018 1:25 pm
by cnavarro
Carlos, prueba asi

Code: Select all  Expand view


#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  Expand view

? FDate( cFile ), FTime( cFile )
 

Re: Actualizar el programa desde FTP.

PostPosted: Fri Mar 02, 2018 8:00 pm
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,