Error UnZipFile (Solucionado)

Error UnZipFile (Solucionado)

Postby Manuel Aranda » Fri Jul 07, 2023 4:49 am

Recientemente he actualizado a la última version de FWH y tengo problemas para descomprimir ficheros con UnZipFile (utilizo xHarbour)
Uso el mismo código desde hace más de diez años sin problema alguno
Code: Select all  Expand view  RUN

...................
       /*realiza la descompresion del fichero*/

            hb_SetDiskZip( bOnSetDiskZip )
            lOkUnZip := hb_UnZipFile( cSourceUnZip      , ;
                                      bOnUnZipFile      , ;
                                      lUnZipWithPath    , ;
                                      NIL               , ;
                                      cFolderTargetUnZip + "\" )

            /*verifica proceso e informa al usuario*/
            IF lOkUnZip
               MsgInfo( "
¡¡¡ La restauración del fichero de respaldo ha tenido éxito !!!" ,"")

               Indices(nSerie,.t.,cMultiples)
               oDlg:End()
            ELSE
               MsgStop( "
La restauración del fichero de respaldo ha fallado !!!","" )
               Abrefi()
            ENDIF
            //
....................


Sin embargo ahora la comprensión la realiza correctamente pero la descompresión falla y no sé por qué. No he tocado ni una linea de código.
He probado a cambiar HBZIP.LIB por la antigua y el problema persiste.
Last edited by Manuel Aranda on Thu Jul 13, 2023 9:41 am, edited 1 time in total.
Un saludo,
Manuel

xH 1.2.3, FWH 23.07 32 bits, BC++ 7.4, xVerce CW 1.0, PellesC
User avatar
Manuel Aranda
 
Posts: 604
Joined: Wed Oct 19, 2005 8:20 pm
Location: España

Re: Error UnZipFile

Postby nageswaragunupudi » Sat Jul 08, 2023 3:24 am

hb_unzipfile is not FWH function but (x)Harbour function.
Are you now using Harbour or xHarbour?
Regards

G. N. Rao.
Hyderabad, India
User avatar
nageswaragunupudi
 
Posts: 10643
Joined: Sun Nov 19, 2006 5:22 am
Location: India

Re: Error UnZipFile

Postby Manuel Aranda » Sat Jul 08, 2023 4:45 am

Good morning, Mr. Rao. I am using xHarbour .
Un saludo,
Manuel

xH 1.2.3, FWH 23.07 32 bits, BC++ 7.4, xVerce CW 1.0, PellesC
User avatar
Manuel Aranda
 
Posts: 604
Joined: Wed Oct 19, 2005 8:20 pm
Location: España

Re: Error UnZipFile

Postby Enrico Maria Giordano » Sat Jul 08, 2023 8:53 am

Can you post a reduced and self-contained sample showing the problem, please?
User avatar
Enrico Maria Giordano
 
Posts: 8716
Joined: Thu Oct 06, 2005 8:17 pm
Location: Roma - Italia

Re: Error UnZipFile

Postby Manuel Aranda » Sat Jul 08, 2023 11:03 am

Hello Enrico, for years I have been using an adapted version of xblite published in this forum. And as I said before, this code works perfectly with older versions of xHarbour and FWH. This is the code:
Code: Select all  Expand view  RUN

*************************************
FUNCTION COPIASZIP(cMultiples)
*************************************
   LOCAL oFont
   LOCAL oDlg
   LOCAL oBrowseZip
   Local cModulo:=GetModuleFilename(GetInstance())
   Local cDir:=SUBSTR(ALLTRIM(cModulo),1,LEN(ALLTRIM(cModulo))-11)
   Local oBitmap
   Local oCursorMano
   Local cNombreFi
   //
   Local cAnyo:=STR(YEAR(DATE()),4)
   Local cMes :=ALLTRIM(STR(MONTH(DATE()),2))
   Local cDia :=ALLTRIM(STR(DAY(DATE()),2))
   Local cCoNombre:=ALLTRIM(Decrypt(FRECU2->CONOMBRE,"6"))
   //
   IF VAL(SUBSTR(cMultiples,1,2)) > 0
      cDir:= cDir+"COMU"+SUBSTR(cMultiples,1,2)+"\"
   ENDIF
   //
   /*variables de seccion zip*/
   PRIVATE oFolderSourceZip, cFolderSourceZip
   PRIVATE oGetFolderSourceZip
   PRIVATE oIncludeSubFolder, lIncludeSubFolder
   PRIVATE oZipToFloppy, lZipToFloppy
   PRIVATE oFolderTargetZip, cFolderTargetZip
   PRIVATE oGetFolderTargetZip
   PRIVATE oFilesCountZip, nTotalFilesToZip
   PRIVATE nSizeFilesToZip
   PRIVATE oDoCompress
   PRIVATE acFilesToZip := { { "
", 0, CToD( "" ), "" } }
   PRIVATE cDestino:=ALLTRIM(FRECU2->RutaZip)
   //
   IF LEN(cMes) = 1
      cMes="
0"+cMes
   ENDIF
   IF LEN(cDia) = 1
      cDia="
0"+cDia
   ENDIF
   //
   cNombreFi:=cAnyo+cMes+cDia+"
.ZIP"
   //
   //RENAME "
FRECU.DBF" TO "FRECU.DDD"
   DbCloseAll()
   //
   FRename(cDir+"
FRECU.DBF", cDir+"FRECU.DDD")
   /*
   IF VAL(SUBSTR(cMultiples,1,2)) > 0
      FRename(cDir+"
FRECU.DBF", "FRECU.DDD")
   ELSE
      FRename("
FRECU.DBF", "FRECU.DDD")
   ENDIF
   //
   */
   /*valores inciaiales de seccion zip*/
   cFolderSourceZip    := "
"
   cFolderTargetZip    := cFilePath(cDestino)+"
AGUAGES-"+cCoNombre+"-"+cNombreFi
   lIncludeSubFolder   := FALSE
   lZipToFloppy        := FALSE
   nTotalFilesToZip    := 0
   nSizeFilesToZip     := 0

   /*definiciones de objetos icon y font*/
   DEFINE CURSOR oCursorMano RESOURCE "
Hand"
   DEFINE FONT oFont NAME "
MS SANS SERIF" SIZE 0,-10

   /*definicion de dialogo*/
   DEFINE DIALOG oDlg NAME "
COPIASZIP" TITLE "Realizar copias de seguridad comprimidas" FONT oFont
   oDlg:lHelpIcon:=.F.

   /*redefinicion de controles de pagina #1*/
   REDEFINE GET oFolderSourceZip ;
            VAR cFolderSourceZip ;
            ID 101 OF oDlg ;
            WHEN FALSE COLOR CLR_BLACK, CLR_MENTA2

   REDEFINE BTNBMP oBitmap RESOURCE "
CANDADO" ID 102 OF oDlg;
          ACTION oDlg:End() NOBORDER


 REDEFINE LISTBOX oBrowseZip FIELDS "
" ;
      HEADERS "
Nombre", "Tamaño", "Fecha", "Ruta" ;
      SIZES   100, 80, 80, 80, 150 ;
      ID 104 OF oDlg

   oBrowseZip:SetArray( acFilesToZip )
   oBrowseZip:bLine = { || { acFilesToZip[ oBrowseZip:nAt ][ 1 ],;
                       cValToChar( acFilesToZip[ oBrowseZip:nAt ][ 2 ] ),;
                       cValToChar( acFilesToZip[ oBrowseZip:nAt ][ 3 ] ),;
                       cValToChar( acFilesToZip[ oBrowseZip:nAt ][ 4 ] ) } }

   GetFilesToZip( cDir, oBrowseZip )
   cFolderSourceZip = cDir+"
*.DB*"

   REDEFINE GET oFolderTargetZip ;
            VAR cFolderTargetZip ;
            ID 106 OF oDlg ;
            COLOR rgb(0,0,0),rgb(255,200,100) READONLY //WHEN FALSE COLOR CLR_BLACK, CLR_MENTA2

   REDEFINE BUTTON oGetFolderTargetZip ;
            ID 107 OF oDlg ;
            ACTION SetFileZip()
            oGetFolderTargetZip:cToolTip := "
Seleccionar ruta de copiado y nombre de fichero "

   oFilesCountZip := TProgress() :Redefine( 108, oDlg )

   REDEFINE BUTTONBMP oDoCompress  ID 109 OF oDlg;
          ACTION DoMakeZip( oBrowseZip );
          BITMAP "
ACEPTAR" PROMPT "    Respaldar" TEXTRIGHT
          oDoCompress:cToolTip := "
Generar fichero ZIP y copiarlo en la ruta indicada"


    REDEFINE BUTTONBMP oClose  ID 103 OF oDlg;
          ACTION oDlg:END();
          BITMAP "
SALIR" PROMPT "    Salir" TEXTRIGHT
          oClose:cToolTip := "
Salir "

   oDoCompress:oCursor:=oCursorMano
   oClose:oCursor:=oCursorMano
   oGetFolderTargetZip:oCursor:=oCursorMano

   /*activacion de dialogo*/
   ACTIVATE DIALOG oDlg CENTER

     FRename(cDir+"
FRECU.DDD", cDir+"FRECU.DBF")
     /*
      IF VAL(SUBSTR(cMultiples,1,2)) > 0
         FRename(cDir+"
FRECU.DDD", "FRECU.DBF")
      ELSE
         FRename("
FRECU.DDD", "FRECU.DBF")
      ENDIF
      //
    */
      AbreFi()
      //
      IF FRECU2->(!RecLock(5))
         TONE(400,2)
         TONE(200,2)
         MsgInfo("
No es posible la modificaci¢n;int‚ntelo m s tarde, por favor.")
      ELSE
         FRECU2->Rutazip = ALLTRIM(cDestino)
         //
         FRECU2->(DbRunLock())
         FRECU2->(DbCommit())

      ENDIF
      //
   /*eilminacion de font usadas*/
   oFont:END()

RETURN NIL /*Fin*/

/*--------------------------------------------------------------------------*/

PROCEDURE GetDirToZip( oBrowseZip )
   LOCAL cDir := "
"

   /*solicita directorio origen de ficheros a respaldas*/
   cDir := cGetDir( "
Directorio de ficheros a respaldar" )

   /*si se selecciono un directorio*/
   IF ! Empty( cDir )

      /*obtiene los ficheros a respaldar*/
      GetFilesToZip( cDir, oBrowseZip )

      /*actualiza nombre de directorio fuente*/
      cFolderSourceZip := cDir
      oFolderSourceZip:refresh()

   ENDIF

RETURN

/*--------------------------------------------------------------------------*/

PROCEDURE GetFilesToZip( cDir, oBrowseZip )
   LOCAL aFile
   LOCAL nFiles
   LOCAL aFiles := { }

   /*verifica si se paso el nombre de directorio fuente*/
   IF Empty( cDir )
      RETURN
   ENDIF

   /*verifica si se procesaran los subdirectorios, y se obtiene un arreglo on los ficheros a respaldar*/
   CursorWait()

   /*macara de archivos a recuperar*/
   cDir += "
\*.db*"

   /*si no se incluyen directorios*/
   IF ! lIncludeSubFolder
      /*Parameter of directory( <cMask>, <cFlags>, <lEightDotThree>, <lIncludePathInFiles> )*/
      aFiles := Directory( cDir,,, XBL_FILEWITHPATH )

   ELSE
      /*Parameter of directoryrecurse( <cMask>, <cFlags>, <lEightDotThree>, <lIncludePathInFiles> )*/
      aFiles := directoryrecurse( cDir,,, XBL_FILEWITHPATH )
   ENDIF
   CursorArrow()

   /*si se obtivo algun fichero a respaldar*/
   nFiles := Len( aFiles )
   IF nFiles > 0

      /*asigna el numero de ficheros a respaldar a la var del control meter*/
      nTotalFilesToZip := nFiles
      nFilesZipped     := 0

      /*inicializa arreglo de ficheros y procesa cada uno, acumulando su tamaño*/
      acFilesToZip := Array( Len( aFiles ) )
      FOR EACH aFile IN aFiles
         acFilesToZip[ HB_EnumIndex() ] := { cFileName( aFile[ F_NAME ] )  , ;
                                             aFile[ F_SIZE ] / 1024        , ;
                                             aFile[ F_DATE ]               , ;
                                             cFilePath( aFile[ F_NAME ] )    }

         /*acumula total de tamaños de ficheross*/
         nSizeFilesToZip += aFile[ F_SIZE ]

      NEXT

      /*se obtiene la suma de los tamaños de ficheros a respaldar en KB*/
      nSizeFilesToZip /= 1024

   ELSE

      /*por defecto un elemento en el arreglo para que no de problemas el browse*/
      acFilesToZip     := { { "
", 0, CToD( "" ), "" } }
      nSizeFilesToZip  := 0
      nTotalFilesToZip := 0

   ENDIF

   /*pasa el arreglo al browse*/
   oBrowseZip:SetArray( acFilesToZip )
   oBrowseZip:Refresh( TRUE )
   oBrowseZip:SetFocus()

   /*limpia arreglo y llama al colecor de basura de xharbour*/
   aFiles := NIL
   hb_gcAll()

RETURN

/*--------------------------------------------------------------------------*/

PROCEDURE SetFileZip()
   LOCAL cFile := "
"

   /*si fichero de respaldo estara en disco duro y no en floppy*/
   IF ! lZipToFloppy
      /*solicita el nombre con la unidad destino incluido*/
      cFile := cGetFile( "
ZipFile   | *.zip", "Nombre de fichero de respaldo ", 1, "c:\", XBL_SAVEFILE, XBL_WITHLONGNAME )
      cFile := RTrim( cFile )

      /*agrega la extencion ZIP de ser necesario*/
      IF Empty( cFileExt( cFile ) )
         cFile += "
.zip"
      ENDIF

   ELSE
      /*solo pide nombre de fichero*/
      cFile := Space( 25 )
     // lOk := BoxGet( "
Introdusca dato", "Introdusca nombre del fichero de respaldo en unidad de diskette <A>", @cFile )

      /*agrega al nombre de fichero de respaldo la unidad*/
      IF lOk
         /*TODO: establecer posible malas entradas por parte del usuario*/
         /*agrega unidad de diskette A al nombre de fichero dado, y de ser necesario*/
         cFile := "
A:\" + RTrim( cFile )

         /*agrega la extencion ZIP de ser necesario*/
         IF Empty( cFileExt( cFile ) )
            cFile += "
.zip"
         ENDIF

      ENDIF

   ENDIF

   /*actualiza nombre de directorio fuente*/
   cFolderTargetZip := cFile
   oFolderTargetZip:Refresh()

RETURN

/*--------------------------------------------------------------------------*/

PROCEDURE DoMakeZip( oBrowseZip )
   LOCAL lOkZip        := FALSE
   LOCAL acFiles       := Array( Len( acFilesToZip ) )
   LOCAL bOnZipFile    := { | cFile, nFile | UpdateMeterZip( nFile ) }
   LOCAL bOnSetDiskZip := { | nDisk | MsgInfo( "
Por favor inserte el disco # " + Str( nDisk,,, XBL_TRIM ) ) }

   /*verifica que existan ficheros a respaldar y el nombre del fichero de respaldo se haya definido*/
   //
   IF Empty( cFolderSourceZip ) .OR. Empty( cFolderTargetZip ) .OR. ( Len( acFilesToZip ) = 1 .AND. acFilesToZip[ 1, 1 ] = "
" )
      MsgStop( "
Error, debe definir un nombre para fichero de respaldo." )
      RETURN
   ENDIF
   //
   /*se extra solo el nombre de los ficheros a respaldar incuyendo su path*/
   AEval( acFilesToZip, { | aFile, i | acFiles[ i ] := aFile[ XBL_FILEPATH ] + aFile[ XBL_FILENAME ] } )

   /*establece limites de valores de control meter*/
   oFilesCountZip:SetRange( 0, nTotalFilesToZip )
   oFilesCountZip:SetPos( 0 )

   /*desactiva botones*/
   //oGetFolderSourceZip:disable()
   oGetFolderTargetZip:disable()
   oDoCompress:disable()
   oClose:disable()
   /*realiza la compresion de los ficheros*/
   IF lZipToFloppy
      hb_SetDiskZip( bOnSetDiskZip )
      lOkZip := hb_ZipFileByPKSpan( cFolderTargetZip  , ;
                                    acFiles           , ;
                                    HBL_ZIPLEVEL      , ;
                                    bOnZipFile        , ;
                                    XBL_ZIPOVERWRITE  , ;
                                    NIL               , ;
                                    XBL_ZIPWITHPATH    )
   ELSE
      hb_SetDiskZip( { || NIL } )
      lOkZip := hb_ZipFile( cFolderTargetZip  , ;
                            acFiles           , ;
                            HBL_ZIPLEVEL      , ;
                            bOnZipFile        , ;
                            XBL_ZIPOVERWRITE  , ;
                            NIL               , ;
                            XBL_ZIPWITHPATH    )
   ENDIF

   /*verifica proceso e informa al usuario*/
   IF lOkZip
      MsgInfo( "
¡¡¡ La creación del fichero de respaldo ha tenido éxito !!!","" )
   ELSE
      MsgStop( "
¡¡¡ La creación del fichero de respaldo ha fallado !!!","" )
   ENDIF
   //
   /*reinicia controles*/
   cDestino := cFolderTargetZip
   /*activa botones*/
   oGetFolderTargetZip:enable()
   oDoCompress:enable()
   oClose:enable()

   /*limpia arreglo y llama al colecor de basura de xharbour*/
   acFiles := NIL
   hb_gcAll()

RETURN

/*--------------------------------------------------------------------------*/

PROCEDURE UpdateMeterZip( nFile )
   oFilesCountZip:SetPos( nFile )
   SysRefresh()
RETURN

/*--------------------------------------------------------------------------*/


*************************************
FUNCTION COPIASUNZIP(nSerie,cMultiples)
*************************************
   LOCAL oFont
   LOCAL oDlg
   LOCAL oBrowseUnZip
   Local cModulo:=GetModuleFilename(GetInstance())
   Local cDir:=SUBSTR(ALLTRIM(cModulo),1,LEN(ALLTRIM(cModulo))-11)
   Local oCursorMano
   //
   IF VAL(SUBSTR(cMultiples,1,2)) > 0
      cDir:= cDir+"
COMU"+SUBSTR(cMultiples,1,2)+"\"
   ENDIF
   //
   PRIVATE cDestino:=ALLTRIM(FRECU2->RutaZip)
   /*variables de seccion unzip*/
   PRIVATE oSourceUnZip, cSourceUnZip
   PRIVATE oGetSourceUnZip
   PRIVATE oUnZipWithPath, lUnZipWithPath
   PRIVATE oGetFolderTargetUnZip
   PRIVATE oFolderTargetUnZip, cFolderTargetUnZip
   PRIVATE oFilesCountUnZip, nTotalFilesToUnZip
   PRIVATE nSizeFilesToUnZip, nSizeFilesToUnZipC
   PRIVATE oDoUnCompress
   PRIVATE acFilesToUnZip := { { "
", 0, 0, CToD( "" ),  "" } }

   /*valores inciaiales de seccion unzip*/
   cSourceUnZip        := cDestino
   cFolderTargetUnZip  := cDir
   lUnZipWhitPath      := TRUE
   nTotalFilesToUnZip  := 0
   nSizeFilesToUnZip   := 0
   nSizeFilesToUnZipC  := 0
       //
   /*definiciones de objetos icon y font*/
   DEFINE CURSOR oCursorMano RESOURCE "
Hand"
   DEFINE FONT oFont NAME "
MS SANS SERIF" SIZE 0,-10
   /*definicion de dialogo*/
   DEFINE DIALOG oDlg NAME "
COPIASUNZIP" TITLE "Restaurar copias de seguridad comprimidas" FONT oFont COLOR RGB(0,0,0),RGB(245,158,146)TRANSPARENT
   oDlg:lHelpIcon:=.F.

   /*redefinicion de controles de pagina #2*/


   REDEFINE BTNBMP oBitmap RESOURCE "
CANDADO2" ID 100 OF oDlg;
          ACTION oDlg:End() NOBORDER  TRANSPARENT

   REDEFINE GET oSourceUnZip ;
            VAR cSourceUnZip ;
            ID 101 OF oDlg ;
            COLOR rgb(0,0,0),rgb(255,200,100) READONLY

   REDEFINE BUTTON oGetSourceUnZip ;
            ID 102 OF oDlg ;
            ACTION GetFileToUnZip( oBrowseUnZip )
            oGetSourceUnZip:cToolTip := "
Seleccionar fichero a descomprimir "

   REDEFINE LISTBOX oBrowseUnZip FIELDS "
" ;
         HEADERS "
Nombre", "Tamaño", "Tamaño comp.", "Fecha", "Ruta" ;
         SIZES   100, 80, 80, 80, 150 ;
         ID 103 OF oDlg

   oBrowseUnZip:SetArray( acFilesToUnZip )
   oBrowseUnZip:bLine = { || { acFilesToUnZip[ oBrowseUnZip:nAt ][ 1 ],;
                       cValToChar( acFilesToUnZip[ oBrowseUnZip:nAt ][ 2 ] ),;
                       cValToChar( acFilesToUnZip[ oBrowseUnZip:nAt ][ 3 ] ),;
                       cValToChar( acFilesToUnZip[ oBrowseUnZip:nAt ][ 4 ] ),;
                       cValToChar( acFilesToUnZip[ oBrowseUnZip:nAt ][ 5 ] ) } }
    //
    IF FILE(cDestino)
       GetFilesFromZip( cDestino, oBrowseUnZip )
    ENDIF
    //
   REDEFINE GET oFolderTargetUnZip ;
            VAR cFolderTargetUnZip ;
            ID 105 OF oDlg ;
            WHEN FALSE COLOR CLR_BLACK, CLR_MENTA2

   oFilesCountUnZip := TProgress() :Redefine( 107, oDlg )


   REDEFINE BUTTONBMP oDoUnCompress  ID 108 OF oDlg;
          ACTION DoMakeUnZip( oBrowseUnZip,nSerie,oDlg,cMultiples );
          BITMAP "
ACEPTAR" PROMPT "    Restaurar" TEXTRIGHT
          oDoUnCompress:cToolTip := "
Restaurar ficheros en la ruta indicada "


    REDEFINE BUTTONBMP oClose  ID 110 OF oDlg;
          ACTION oDlg:END();
          BITMAP "
SALIR" PROMPT "    Salir" TEXTRIGHT
          oClose:cToolTip := "
Salir "

   oDoUnCompress:oCursor:=oCursorMano
   oClose:oCursor:=oCursorMano
   oGetSourceUnZip:oCursor:=oCursorMano

   /*activacion de dialogo*/
   ACTIVATE DIALOG oDlg CENTER
   oFont : End()

RETURN NIL /*Fin*/


PROCEDURE GetFileToUnZip( oBrowseUnZip )
   LOCAL cFile

   /*pide al usuario que seleccione el fichero de respaldo*/
   cFile := cGetFile( "
ZipFile   | *.zip", "Nombre de fichero de respaldo a restaurar", 1, "c:\", XBL_OPENFILE, XBL_WITHLONGNAME )

   /*verifica si realmente se paso el fichero*/
   IF ! Empty( cFile )

      /*muestra el nombre del fichero en el dialogo*/
      cSourceUnZip := cFile
      oSourceUnZip:refresh()

      /*extrae informacion del fuchero de respaldo*/
      GetFilesFromZip( cFile, oBrowseUnZip )

   ENDIF

RETURN

/*--------------------------------------------------------------------------*/

PROCEDURE GetFilesFromZip( cFile, oBrowseUnZip )
   LOCAL aFiles := hb_GetFilesInZip( cFile, XBL_GETFULL_INFOZIP )
   LOCAL aFile

   /*obtiene el numero de archivos a descomprimir*/
   nTotalFilesToUnZip := Len( aFiles )

   /*vereficia el valor retornado por la funcion, si es arreglo y si tiene elementos*/
   IF ValType( aFiles ) = "
A" .AND. nTotalFilesToUnZip > 0

      /*inicializa arreglo en cero*/
      acFilesToUnZip := Array( nTotalFilesToUnZip )

      /*procesa cada fichero extrayendo la informacion que interesa*/
      FOR EACH aFile IN aFiles
         acFilesToUnZip[ HB_EnumIndex() ] := { cFileName( aFile[ XBL_IZNAME  ]        ), ;
                                               aFile[ XBL_IZSIZEN ] / 1024  , ;
                                               aFile[ XBL_IZSIZEC ] / 1024  , ;
                                               aFile[ XBL_IZDATE  ]         , ;
                                               cFilePath( aFile[ XBL_IZNAME  ]         ) }

         /*acumula totales de tamaños de ficheros - normal y comprimido*/
         nSizeFilesToUnZip  += aFile[ XBL_IZSIZEN ]
         nSizeFilesToUnZipC += aFile[ XBL_IZSIZEC ]

      NEXT

      /*obtiene los totales en Kb*/
      nSizeFilesToUnZip  /= 1024
      nSizeFilesToUnZipC /= 1024

      /*pasa el arreglo al browse*/
      oBrowseUnZip:SetArray( acFilesToUnZip )
      oBrowseUnZip:Refresh( )

   ENDIF

   oBrowseUnZip:SetFocus()

   /*limpia arreglo y llama al colecor de basura de xharbour*/
   aFiles := NIL
   hb_gcAll()

RETURN

/*--------------------------------------------------------------------------*/

PROCEDURE SetFolderUnZip()
   LOCAL cDir := "
"

   /*pide al usuario de el directorio destino de los datos*/
   cDir := cGetDir( "
Seleccione el directorio donde se restaurarán los ficheros respaldados" )

   /*verifica si se selecciono un directorio*/
   IF Empty( cDir )
      MsgStop( "
Error, defina un directorio destino para los datos !!!" )
      RETURN
   ELSE
      /*muestra el nombre del directorio seleccionado*/
      cFolderTargetUnZip := cDir
      oFolderTargetUnZip:Refresh()
   ENDIF

 RETURN

/*--------------------------------------------------------------------------*/

PROCEDURE DoMakeUnZip( oBrowseUnZip,nSerie,oDlg,cMultiples )
   LOCAL lOkUnZip      := FALSE
   LOCAL acFiles       := Array( Len( acFilesToUnZip ) )
   LOCAL bOnUnZipFile  := { | cFile, nPos | UpdateMeterUnZip( cFile, nPos ) }
   LOCAL bOnSetDiskZip := { | nDisk | MsgInfo( "
Por favor introduzca el disco # " + Str( nDisk,,, XBL_TRIM ) ) }

   /*verifica que existan ficheros a respaldar y el nombre del fichero de respaldo se haya definido*/
   IF Empty( cSourceUnZip ) .OR. Empty( cFolderTargetUnZip ) .OR. ( Len( acFilesToUnZip ) = 1 .AND. acFilesToUnZip[ 1, 1 ] = "
" )
      MsgStop( "
Error, debe definir un fichero de respaldo válido. " )
      RETURN
   ENDIF

   //
   IF MsgNoYes( OemToAnsi( "
­­­ Atenci¢n !!!" ) + CRLF + CRLF +;
                OemToAnsi( "
¨ Seguro que quiere restaurar las copias de seguridad ?") +CRLF+CRLF+;
                OemToAnsi( "
La ejecuci¢n de este proceso conlleva la p‚rdida ") +CRLF+;
                OemToAnsi( "
de los datos actuales que ser n reemplazados por ")+CRLF+;
                OemToAnsi( "
los datos contenidos en las copias de seguridad"),"Restaurar copias de seguridad" )

        // Segunda confirmacion
        IF MsgNoYes( OemToAnsi( "
­­­ Atenci¢n !!!" ) + CRLF + CRLF +;
                   OemToAnsi( "
Por £ltima vez: ") +CRLF+CRLF+;
                   OemToAnsi( "
¨ Tiene la completa seguridad de querer restaurar las copias ? ") +CRLF+;
                   OemToAnsi( "
"),"Restaurar copias de seguridad" )


           DbCloseAll()
            /*se extra solo el nombre de los ficheros a respaldar incuyendo su path*/
            AEval( acFilesToUnZip, { | aFile, i | acFiles[ i ] := aFile[ XBL_UZFILEPATH ] + aFile[ XBL_UZFILENAME ] } )
            /*establece limites de valores de control meter*/
            oFilesCountUnZip:SetRange( 0, nTotalFilesToUnZip )
            oFilesCountUnZip:SetPos( 0 )

            /*desactiva botones*/
            oGetSourceUnZip:disable()
           // oGetFolderTargetUnZip:disable()
            oDoUnCompress:disable()
            oClose:disable()

            /*realiza la descompresion del fichero*/

            hb_SetDiskZip( bOnSetDiskZip )
            lOkUnZip := hb_UnZipFile( cSourceUnZip      , ;
                                      bOnUnZipFile      , ;
                                      lUnZipWithPath    , ;
                                      NIL               , ;
                                      cFolderTargetUnZip + "
\" )

            /*verifica proceso e informa al usuario*/
            IF lOkUnZip
               MsgInfo( "
¡¡¡ La restauración del fichero de respaldo ha tenido éxito !!!" ,"")

               Indices(nSerie,.t.,cMultiples)
               oDlg:End()
            ELSE
               MsgStop( "
La restauración del fichero de respaldo ha fallado !!!","" )
               Abrefi()
            ENDIF
            //

            oClose:enable()

            /*limpia arreglo y llama al colector de basura de xharbour*/
            acFiles := NIL
            hb_gcAll()
        //
        ENDIF//de la segunda confirmaci¢n
        //
    ENDIF
    //

   oClose:enable()

   /*limpia arreglo y llama al colector de basura de xharbour*/
   acFiles := NIL
   hb_gcAll()

RETURN


/*--------------------------------------------------------------------------*/

PROCEDURE UpdateMeterUnZip( cFile, nPos )
   oFilesCountUnZip:SetPos( nPos )
   SysRefresh()
RETURN

/*--------------------------------------------------------------------------*/

Un saludo,
Manuel

xH 1.2.3, FWH 23.07 32 bits, BC++ 7.4, xVerce CW 1.0, PellesC
User avatar
Manuel Aranda
 
Posts: 604
Joined: Wed Oct 19, 2005 8:20 pm
Location: España

Re: Error UnZipFile

Postby Enrico Maria Giordano » Sat Jul 08, 2023 12:07 pm

I need a reduced and self-contained sample. Otherwise I can't help you, sorry.
User avatar
Enrico Maria Giordano
 
Posts: 8716
Joined: Thu Oct 06, 2005 8:17 pm
Location: Roma - Italia

Re: Error UnZipFile

Postby karinha » Sat Jul 08, 2023 2:13 pm

Manuel, prueba con este para ver se funciona bién aún:

xHarbour:

https://mega.nz/file/YFdWBKLD#K9ykyTKdJ6TU4MMfSgrdScK5pNP3EskOH-o288qzIcc

Harbour:

https://mega.nz/file/II9GTBLZ#h4aAe8VgDqbICFsLRu8lXI5xLH-YbTq3Z3ekImYvOFg

Gracias,

Regards, saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7828
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Error UnZipFile

Postby karinha » Sat Jul 08, 2023 2:59 pm

Manuel, compare:

Code: Select all  Expand view  RUN

/*-----------------------------------------------------------------------------
Fichero    : xBLite.prg
Proyecto   : XBackupLite (utilidad de compresion para datos de aplicaicones)
Objetivo   : Prueba del poder del compilador xHarbour - 0.99.61
Fecha      : 2004.03.06
Autor      : Carlos Vargas - Nicaragua
Modificado : Por JoÆo Santos em: 15/09/2006 - SÆo Paulo - Brazil
Emails     : kapiabafwh@gmail.com
Derechos   : Todos los derechos reservados
Gracias    : Kleyber Derick - Valdir Brando y Carlos Vargas. Saludos.
Cambios    : Ahora Usando TSBROWSE.PRG Directamente Sin la LIB. Bien Mejor.
-----------------------------------------------------------------------------*/


#Include "xBlite.Ch"  //-> Cont‚m os Arquivos de Cabe‡alho Necess rios

//-> Para los Folders - Abas(orelhas) dos Folders - P ginas
#DEFINE PAGE1   oFolder:aDialogs[ 1 ]
#DEFINE PAGE2   oFolder:aDialogs[ 2 ]
#DEFINE PAGE3   oFolder:aDialogs[ 3 ]

#Define CLR_AMARELO   nRGB( 255, 255, 230 ) //--> Amarelo Para o Fundo
#Define CLR_VERMELHO  nRGB( 255, 000, 000 ) //--> Vermelho Para a Letra
#Define CLR_BOMBOM    nRGB( 165,  42,  42 ) //--> Marrom BomBom
#Define CLR_MARROM    nRGB( 235, 202, 171 ) //--> Marrom Normal

STATIC nOpcaoRadio := 2       //-> Op‡Æo do Radio da Pesquisa

/*Procedimiento principal*/
FUNCTION XBLITE()  //->MAIN()

    MEMVAR cPRGPATH, cFILEPATH

    SndPlaySound( "Init.Wav" )

    cPRGPATH := cFILEPATH(GETMODULEFILENAME(GETINSTANCE()))
    cPRGPATH := cShortName(cPRGPATH)  //-> Modified / Modificado al final

    XBACKUPLITE()

    lCHDIR(cPRGPATH)

RETURN NIL

/* Backupeador */
FUNCTION XBackupLite()

    LOCAL oIcon
    LOCAL oFont, oFnt, oSayBtn01, oSayBtn02
    LOCAL oFontT
    LOCAL oDlg
    LOCAL oFolder
    LOCAL oBrowseZip
    LOCAL oBrowseUnZip
    LOCAL IDCor
    LOCAL oBrush
    LOCAL oDbfVendedor
    LOCAL NOME_ARQ, NREGISTRO
    LOCAL oRadMenu
    LOCAL cTitle := OemToAnsi( "Sistema de Backup - Professional Edition -  " )
    LOCAL dDataDia := DTOC( DATE() )

    MEMVAR PANY

    /*variables de seccion zip*/
    PRIVATE oFolderSourceZip, cFolderSourceZip
    PRIVATE oGetFolderSourceZip
    PRIVATE oIncludeSubFolder, lIncludeSubFolder
    PRIVATE oZipToFloppy, lZipToFloppy
    PRIVATE oFolderTargetZip, cFolderTargetZip
    PRIVATE oGetFolderTargetZip
    PRIVATE oFilesCountZip, nFilesZipped, nTotalFilesToZip
    PRIVATE nSizeFilesToZip
    PRIVATE oDoCompress
    PRIVATE acFilesToZip   := { { "", 0, ctod(""), "" } }

    /*variables de seccion unzip*/
    PRIVATE oSourceUnZip, cSourceUnZip
    PRIVATE oGetSourceUnZip
    PRIVATE oUnZipWithPath, lUnZipWithPath
    PRIVATE oGetFolderTargetUnZip
    PRIVATE oFolderTargetUnZip, cFolderTargetUnZip
    PRIVATE oFilesCountUnZip, nFilesUnZipped, nTotalFilesToUnZip
    PRIVATE nSizeFilesToUnZip,nSizeFilesToUnZipC
    PRIVATE oDoUnCompress
    PRIVATE acFilesToUnZip := { { "", 0, 0, ctod(""),  "" } }

    PUBLIC XFANTASIA, XVERSAO, XNOMEEMP

    /*valores inciaiales de seccion zip*/
    cFolderSourceZip    := ""
    cFolderTargetZip    := ""
    lIncludeSubFolder   := FALSE
    lZipToFloppy        := FALSE
    nTotalFilesToZip    := 0
    nSizeFilesToZip     := 0

    /*valores inciaiales de seccion unzip*/
    cSourceUnZip        := ""
    cFolderTargetUnZip  := ""
    lUnZipWhitPath      := TRUE
    nTotalFilesToUnZip  := 0
    nSizeFilesToUnZip   := 0
    nSizeFilesToUnZipC  := 0

    /*definiciones de objetos icon y font*/
    DEFINE FONT oFont  NAME GetSysFont() SIZE 0, -11 BOLD
    DEFINE FONT oFnt   NAME GetSysFont() SIZE 0, -12 BOLD
    DEFINE FONT oFontT NAME GetSysFont() SIZE 0, -16 BOLD

    DEFINE ICON oIcon  NAME "XBACKUPLITE"

    DEFINE BRUSH oBrush FILE "COMPAR.BMP"

    /*definicion de dialogo*/
    DEFINE DIALOG oDlg NAME "XBACKUPLITE"                                    ;
           TITLE cTitle + ALLTRIM( XFANTASIA ) + "  - " + "Data: " + dDataDia;
           FONT oFont ICON oIcon                                             ;
           BRUSH oBrush TRANSPARENT

    oDlg:lHelpIcon := .F.

    /*logotipo del programa*/
    REDEFINE BITMAP          ;
             ID 101 OF oDlg  ;
             NAME "xbl_logo" ;
             ADJUST

    /*redefinicion de folder con 2 paginas*/
    REDEFINE FOLDER oFolder ID 102 OF oDlg                                    ;
             PROMPT  "Arqui&var","Res&taurar","A&juda"                        ;
             DIALOGS "PageBackup","PageRestore","PageAbout"                   ;
             BITMAPS "BUSCAR", "RESTAURAR", "BTN_AJUDA"                       ;
             TABCOLOR   CLR_BLACK                                             ;
             FOCUSCOLOR CLR_VERMELHO                                          ;
             COLORS nRGB( 127, 127, 127 ), nRGB( 255, 215, 000 )              ;
             ADJUST
    //-> CheckBox e Radios Assume a Cor do Dialogo - CONTROL.PRG METODO COLORS()
    //-> METHOD Colors( hDC ) CLASS TControl - Mesma cor do Fundo do 1§ Folder

    oFolder:SetOption(1)
    oFolder:aEnable := { .T., .T., .T. } //-> Inibe as Orelhas(Abas)
    oFolder:Show()
    oFolder:lWin95Look := .F.            //-> Modifica o Estilo da Orelha.

    //-> Cores no Folder - Colores en los Folders
    oFolder:aDialogs[1]:bPainted := { || FillWnd ( oFolder:aDialogs[1], ;
                                                   nRGB( 255, 215,   0 ) ) }


    oFolder:aDialogs[2]:bPainted := { || FillWnd ( oFolder:aDialogs[2], ;
                                                   nRGB( 255, 130, 170 ) ) }

    oFolder:aDialogs[3]:bPainted := { || FillWnd ( oFolder:aDialogs[3], ;
                                                   nRGB( 255, 255, 200 ) ) }

    //--- Melhoria visual nos say's
    For IDCor=401 TO 401
        REDEFINE SENSITIVE SAY ID iDcor ;
        COLOR CLR_HRED                  ;
        OF oFolder:aDialogs[ 1 ]        ;
        UPDATE
    Next IDCor // By Ednaldo Rolim - Yes!

    //--- Melhoria visual nos say's
    For IDCor=402 TO 402
        REDEFINE SENSITIVE SAY ID iDcor ;
        COLOR CLR_HCYAN                 ;
        OF oFolder:aDialogs[ 1 ]        ;
        UPDATE
    Next IDCor // By Ednaldo Rolim - Yes!

    For IDCor=401 TO 401
        REDEFINE SENSITIVE SAY ID iDcor ;
        COLOR CLR_WHITE                 ;
        OF oFolder:aDialogs[ 2 ]        ;
        UPDATE
    Next IDCor // By Ednaldo Rolim - Yes!

    For IDCor=402 TO 402
        REDEFINE SENSITIVE SAY ID iDcor ;
        COLOR CLR_HCYAN                 ;
        OF oFolder:aDialogs[ 2 ]        ;
        UPDATE
    Next IDCor // By Ednaldo Rolim - Yes!

    For IDCor=401 TO 413
        REDEFINE SENSITIVE SAY ID iDcor ;
        COLOR CLR_BLACK                 ;
        OF oFolder:aDialogs[ 3 ]        ;
        UPDATE
    Next IDCor // By Ednaldo Rolim - Yes!

    REDEFINE DYNAMIC SAY oSayBtn01 ID 801 OF oFolder:aDialogs[ 1 ]           ;
             PROMPT ( OemToAnsi( "                 Click no BotÆo Abaixo"   +;
                                 "(Cƒmera) Para Escolher a Pasta(Diret¢rio)"+;
                                 " de Origem Onde EstÆo as Informa‡äes "    +;
                                 "Para  Arquivar em Disqute, PenDrive, Etc. "));
             CENTERED HORIZONTAL SCROLL SPEED 53 WRAP                        ;
             COLORS nRGB( 000, 000, 000 ), nRGB( 255, 215, 000 )             ;
             FONT oFnt

    REDEFINE DYNAMIC SAY oSayBtn01 ID 802 OF oFolder:aDialogs[ 1 ]           ;
             PROMPT ( OemToAnsi( "                 Click no BotÆo Abaixo"+   ;
                                 "(Cƒmera) Para Escolher a Pasta(Diret¢rio)"+;
                                 " de Destino Onde FicarÆo as Informa‡äes " +;
                                 "Arquivadas no Perif‚rico Escolhido. "     +;
                                 "CDRW->(NERO), Disquetes, PenDrive.   " ) ) ;
             CENTERED HORIZONTAL SCROLL SPEED 53 WRAP                        ;
             COLORS nRGB( 000, 000, 000 ), nRGB( 255, 215, 000 )             ;
             FONT oFnt

    /*redefinicion de controles de pagina #1*/
    REDEFINE GET oFolderSourceZip ;
             VAR cFolderSourceZip ;
             ID 101 OF PAGE1      ;
             READONLY             ;
             COLORS CLR_VERMELHO, CLR_AMARELO

    //-> BotÆo da Busca do Diret¢rio de Origem
    /* //-> GERANDO DE BCLRGRAD - TROQUEI BTNBMP POR BUTTONBMP
    // REDEFINE BTNBMP oGetFolderSourceZip ID 102    ;
    //          RESOURCE "BUSCAR"  OF PAGE1 UPDATE   ;
    //          ACTION ( GetDirToZip( oBrowseZip ) )
    */


    REDEFINE BUTTONBMP oGetFolderSourceZip ID 102 OF PAGE1 UPDATE   ;
             BITMAP "BUSCAR"                                        ;
             ACTION ( GetDirToZip( oBrowseZip ) )

    oGetFolderSourceZip:cToolTip := OemToAnsi( "Selecionar a Origem " +  ;
                                               "(Diret¢rio) da C¢pia" )


    REDEFINE BUTTON oRadMenu VAR nOpcaoRadio  ID 201             ;
             OF oFolder:aDialogs[ 1 ]                            ;
             ACTION ( MOSTRA_HELP( oFolder ) )

    oRadMenu:cToolTip := OemToAnsi( "Pequeno Help Para o Usu rio" )

    REDEFINE CHECKBOX oIncludeSubFolder VAR lIncludeSubFolder ;
             COLORS nRgb( 250,   0 ,  0 ),                    ;
                    nRgb(  72, 180, 215 )                     ;
             ID 103 OF PAGE1                                  ;
             ON CHANGE GetFilesToZip( cFolderSourceZip, oBrowseZip )

    oIncludeSubFolder:cToolTip := OemToAnsi( "InclusÆo das Sub Pastas " +    ;
                                             "do Diret¢rio da C¢pia   " )
    REDEFINE BROWSE oBrowseZip          ;
             ID 104 OF PAGE1 FONT oFont ;
             COLOR CLR_BLACK, CLR_YELLOW01

    oBrowseZip:SetArray( acFilesToZip )

    ADD COLUMN TO oBrowseZip ARRAY ELEMENT 1 ;
        TITLE "Nome do Arquivo" SIZE 140     ;
        FOOTER { || TRANSFORM( nTotalFilesToZip, "99,999 Arquivos" ) }

    ADD COLUMN TO oBrowseZip ARRAY ELEMENT 2 ;
        TITLE "Tamanho"                      ;
        SIZE 100                             ;
        PICTURE "9,999,999.99 Kb"            ;
        FOOTER { || transform( nSizeFilesToZip, "9,999,999.99 Kb" ) } ;
        ALIGN DT_RIGHT

    ADD COLUMN TO oBrowseZip ARRAY ELEMENT 3 ;
        TITLE "Data" SIZE 70                 ;
        ALIGN DT_CENTER

    ADD COLUMN TO oBrowseZip ARRAY ELEMENT 4 ;
        TITLE "Path(Caminho)" SIZE 180

    /*propiedades de objeto browse*/
    WITH OBJECT oBrowseZip
         :nFreeze     := 1
         :lNoVScroll  := .F.
         :nHeightHead := 18
         :nHeightCell := 18
         :nHeightFoot := 18
         :SetColor( { CLR_HEADF, CLR_FOOTF }, { {|| CLR_BLUE }, {|| CLR_RED } } )
    END WITH

    REDEFINE CHECKBOX oZipToFloppy         ;
             VAR lZipToFloppy              ;
             COLORS nRgb( 250,   0 ,  0 ), ;
                    nRgb(  72, 180, 215 )  ;
             ID 105 OF PAGE1               ;
             ON CHANGE ( cFolderTargetZip := "", oFolderTargetZip:Refresh() )

    oZipToFloppy:cToolTip := OemToAnsi( "Escolha se Quer a C¢pia em Disquetes" )

    REDEFINE GET oFolderTargetZip ;
             VAR cFolderTargetZip ;
             ID 106 OF PAGE1      ;
             READONLY             ;
             COLORS CLR_VERMELHO, CLR_AMARELO

    /*
    //-> Botao Para Selecior a Pasta de Origem, Onde Estao os Arquivos
    REDEFINE BTNBMP oGetFolderTargetZip ID 107  ;
             RESOURCE "BUSCAR"  OF PAGE1 UPDATE ;
             ACTION ( SetFileZip() )
    */

    //-> PROBLEMAS COM BCLRGRAD
    REDEFINE BUTTONBMP oGetFolderTargetZip ID 107 OF PAGE1 UPDATE   ;
             BITMAP "BUSCAR"                                        ;
             ACTION ( SetFileZip() )

    oGetFolderTargetZip:cToolTip := OemToAnsi( "Selecionar o Destino " + ;
                                               "(Diret¢rio) dos "      + ;
                                               "Arquivos Para Copiar" )

    oFilesCountZip := TProgress():Redefine( 108, PAGE1 )
 
    REDEFINE BUTTON oDoCompress ;
             ID 109 OF PAGE1    ;
             ACTION ( DOMAKEZIP( oFolder, oBrowseZip ) )

    oDoCompress:cToolTip := ( OemToAnsi( "Gravar os Arquivos no " +           ;
                                         "Diret¢rio(Pasta) de Destino" ) )

    /*redefinicion de controles de pagina #2*/
    REDEFINE GET oSourceUnZip ;
             VAR cSourceUnZip ;
             ID 101 OF PAGE2  ;
             READONLY         ;
             COLORS CLR_VERMELHO, CLR_AMARELO
    /*
    //-> Botao da Pasta de Destino Para Onde Vai o BACKUP - Copia
    REDEFINE BTNBMP oGetSourceUnZip ID 102      ;
             RESOURCE "BUSCAR"  OF PAGE2 UPDATE ;
             ACTION ( GetFileToUnZip( oBrowseUnZip ) )
    */

    REDEFINE BUTTONBMP oGetSourceUnZip ID 102 OF PAGE2 UPDATE   ;
             BITMAP "BUSCAR"                                    ;
             ACTION ( GetFileToUnZip( oBrowseUnZip ) )

    oGetSourceUnZip:cToolTip := OemToAnsi( "Selecionar a Origem(Diret¢rio) "+;
                                           "Para Onde Vai o BACKUP(Destino)" )
   
    REDEFINE BROWSE oBrowseUnZip        ;
             ID 103 OF PAGE2 FONT oFont ;
             COLOR CLR_BLACK, CLR_YELLOW01

    oBrowseUnZip:SetArray( acFilesToUnZip )

    ADD COLUMN TO oBrowseUnZip ARRAY ELEMENT 1 ;
        TITLE "Nome" SIZE 140                  ;
        FOOTER { || transform( nTotalFilesToUnZip, "99,999 Arquivos" ) }

    ADD COLUMN TO oBrowseUnZip ARRAY ELEMENT 2 ;
        TITLE "Tamanho Normal"                 ;
        SIZE 100                               ;
        PICTURE "9,999,999.99 Kb"              ;
        FOOTER { || transform( nSizeFilesToUnZip, "9,999,999.99 Kb" ) } ;
        ALIGN DT_RIGHT

    ADD COLUMN TO oBrowseUnZip ARRAY ELEMENT 3 ;
        TITLE "Tamanho Comp."                  ;
        SIZE 100                               ;
        PICTURE "9,999,999.99 Kb"              ;
        FOOTER { || transform( nSizeFilesToUnZipC, "9,999,999.99 Kb" ) } ;
        ALIGN DT_RIGHT

    ADD COLUMN TO oBrowseUnZip ARRAY ELEMENT 4 ;
        TITLE "Data" SIZE 70                   ;
        ALIGN DT_CENTER

    ADD COLUMN TO oBrowseUnZip ARRAY ELEMENT 5 ;
        TITLE "Path" SIZE 180

    /*propiedades de objeto browse*/
    WITH OBJECT oBrowseUnZip
         :nFreeze     := 1
         :lNoVScroll  := .F.
         :nHeightHead := 18
         :nHeightCell := 18
         :nHeightFoot := 18
         :SetColor( { CLR_HEADF, CLR_FOOTF }, { {|| CLR_BLUE }, {|| CLR_RED } } )
    END WITH

    REDEFINE CHECKBOX oUnZipWithPath       ;
             VAR lUnZipWithPath            ;
             COLORS nRgb( 250,   0 ,  0 ), ;
                    nRgb(  72, 180, 215 )  ;
             ID 104 OF PAGE2

    oUnZipWithPath:cToolTip := OemToAnsi( "Escolha se Quer Restaurar a    "+ ;
                                          "C¢pia nos Diret¢rios de Origem "+ ;
                                          "Informe o Diret¢rio de Origem. " )

    REDEFINE GET oFolderTargetUnZip ;
             VAR cFolderTargetUnZip ;
             ID 105 OF PAGE2        ;
             READONLY               ;
             COLORS CLR_VERMELHO, CLR_AMARELO

    /* //-> PROBELMAS COM BCLRGRAD
    //-> Botao Para Selecionar o Destino da Pasta do RESTORE
    REDEFINE BTNBMP oGetFolderTargetUnZip ID 106 ;
             RESOURCE "BUSCAR"  OF PAGE2 UPDATE  ;
             ACTION ( SetFolderUnZip() )
    */

    REDEFINE BUTTONBMP oGetFolderTargetUnZip ID 106 OF PAGE2 UPDATE ;
             BITMAP "BUSCAR"                                        ;
             ACTION ( SetFolderUnZip() )

    oGetFolderTargetUnZip:cToolTip := "Selecionar o Destino(Pasta) Onde " +   ;
                                      "Vai Ser Restaurado o BACKUP"

    oFilesCountUnZip := TProgress():Redefine( 107, PAGE2 )

    REDEFINE BUTTON oDoUnCompress ;
             ID 108 OF PAGE2      ;
             ACTION ( DOMAKEUNZIP( oFolder, oBrowseZip ) )

   oDoUnCompress:cToolTip := ( OemToAnsi( "Restaura‡Æo dos Arquivos " +       ;
                                          "de Seguran‡a no "          +       ;
                                          "Diret¢rio(Pasta) de Destino" ) )

    /*redefinicion de controles de pagina #3*/

    //REDEFINE SAY ID 101 OF PAGE3 FONT oFontT COLOR CLR_BLUE
    REDEFINE SAY ID 101 OF PAGE3 FONT oFontT COLOR CLR_BLUE ;
             PROMPT OemToAnsi( "Sistema - " +          ( XVERSAO ) )  + ;
                               " * " + ALLTRIM( STR( PANY ) ) + " * " + ;
                               " - Backup "

    REDEFINE SAY ID 102 OF PAGE3 FONT oFontT COLOR CLR_BLUE

    REDEFINE SAY ID 103 OF PAGE3 FONT oFontT COLOR CLR_BLUE

    REDEFINE SAY ID 104 OF PAGE3 FONT oFontT COLOR CLR_HGREEN ;
             PROMPT ALLTRIM( XNOMEEMP )

    REDEFINE SAY ID 105 OF PAGE3 FONT oFontT COLOR CLR_BLUE

    REDEFINE SAY ID 106 OF PAGE3 FONT oFontT COLOR CLR_HRED

    /*boton de cierre de dialogo*/
    REDEFINE BUTTON oClose ID 103 OF oDlg                                     ;
             ACTION ( oDlg:End() ) CANCEL

    oClose:cToolTip := ( OemToAnsi( "Saida - Exit - Cancelar" ) )

    SET FONT OF oClose        TO oFnt
    SET FONT OF oDoCompress   TO oFnt
    SET FONT OF oDoUnCompress TO oFnt
    SET FONT OF oRadMenu      TO oFnt

    /*activacion de dialogo*/
    ACTIVATE DIALOG oDlg CENTERED

    /*eilminacion de font usadas*/

    oBrowseZip:Close()
    oBrowseUnZip:Close()

    oFont:End()
    oFnt:End()
    oFontT:End()
    oBrush:End()

    Release All

RETURN NIL  //-> Fin - The End - Fim - Finaliza Backup

STATIC FUNCTION MOSTRA_HELP( oFolder )

    LOCAL oDlg, oSay, oSaida, IDCor, oFont, oBrush

        //-> Dialogo
        DEFINE BRUSH oBrush FILE "COMPAR.BMP"

        DEFINE FONT oFont NAME "Times New Roman" SIZE 0, -14 BOLD

        DEFINE DIALOG oDlg RESOURCE "DLG_XBLITE_HELP"             ;
               BRUSH oBrush TRANSPARENT

        oDlg:lHelpIcon := .F.

        For IDCor=401 TO 405
            REDEFINE SAY oSay      ID iDcor ;
            COLOR CLR_BLACK, CLR_AMARELO    ;
            OF oDlg                         ;
            UPDATE BOX SHADED               ;
            FONT oFont
        Next IDCor // By Ednaldo Rolim - Yes!

        REDEFINE BUTTON  oSaida  ID 301 OF oDlg                              ;
                 ACTION( oDlg:End() ) CANCEL

        oSaida:cToolTip := ( OemToAnsi( "Saida - Exit - Cancelar" ) )

        SET FONT OF oDlg TO oFont

        ACTIVATE DIALOG oDlg CENTERED

        oFont:End()
        oBrush:End()

        oFolder:SetOption(3)
        oFolder:SetFocus()

RETURN NIL

FUNCTION GetDirToZip( oBrowseZip )

    LOCAL cDir := ""
    LOCAL cFiles

    /*solicita directorio origen de ficheros a respaldas*/
    cDir := cGetDir( "Selecione a Pasta a Ser Arquivada" )

    SndPlaySound( "Init.Wav" )

    /*si se selecciono un directorio*/
    IF !EMPTY( cDir )

        /*obtiene los ficheros a respaldar*/
        GetFilesToZip( cDir, oBrowseZip )

        /*actualiza nombre de directorio fuente*/
        cFolderSourceZip := cDir
        oFolderSourceZip:Refresh()

    ELSE

        SndPlaySound( "Erro.Wav" )

    ENDIF

    //-> Modified
    IF !EMPTY( cDir )
        SndPlaySound( "Pronto.Wav" )
    ENDIF

RETURN NIL

FUNCTION GetFilesToZip( cDir, oBrowseZip )

    LOCAL aFile
    LOCAL aFiles
    LOCAL nFiles

    /*verifica si se paso el nombre de directorio fuente*/
    IF EMPTY( cDir )
        SndPlaySound( "Erro.Wav" )
        RETURN NIL
    ENDIF

    SndPlaySound( "Init.Wav" )

    //-> verifica si se procesaran los subdirectorios, y se obtiene un
    //-> arreglo on los ficheros a respaldar
    IF !lIncludeSubFolder
        aFiles := Directory( cDir + "\*.*",,, XBL_FILEWITHPATH )
    ELSE
        aFiles := Directoryrecurse( cDir + "\*.*",, XBL_FILEWITHPATH )
    ENDIF

    /*si se obtivo algun fichero a respaldar*/
    nFiles := len( aFiles )

    IF nFiles > 0

        /*asigna el numero de ficheros a respaldar a la var del control meter*/
        nTotalFilesToZip := nFiles
        nFilesZipped     := 0

        //-> inicializa arreglo de ficheros y procesa cada uno, acumulando
        //-> su tamaño(Tamanho)
        acFilesToZip := {}
        FOR EACH aFile IN aFiles
            AADD( acFilesToZip, { cFileName( aFile[ F_NAME ] )  , ;
                                  aFile[ F_SIZE ] / 1024        , ;
                                  aFile[ F_DATE ]               , ;
                                  cFilePath( aFile[ F_NAME ] )  })

            /*acumula total de tamaños de archivos*/
            nSizeFilesToZip += aFile[ F_SIZE ]

        NEXT

        /*se obtiene la suma de los tamaños de ficheros a respaldar en KB*/
        nSizeFilesToZip /= 1024

    ELSE

        //-> por defecto un elemento en el arreglo para que no de problemas
        //-> el browse
        acFilesToZip     := { {"", 0, CTOD(""), "" } }
        nSizeFilesToZip  := 0
        nTotalFilesToZip := 0

    ENDIF

    /*pasa el arreglo al browse*/
    oBrowseZip:SetArray( acFilesToZip )
    oBrowseZip:Refresh( TRUE )
    oBrowseZip:SetFocus()

    /*limpia arreglo y llama al colecor de basura de xharbour*/
    aFiles := Nil
    hb_gcAll()

    SndPlaySound( "Pronto.Wav" )

RETURN NIL

FUNCTION SetFileZip()

    LOCAL cFile := ""

    SndPlaySound( "Init.Wav" )

    /*si fichero de respaldo estara en disco duro y no en floppy*/
    IF !lZipToFloppy
        /*solicita el nombre con la unidad destino incluido*/
        cFile := cGetFile( "ZipFile   | *.zip", "Nome do Arquivo na Unidade de Disco Fixo ", 1, "c:\", XBL_SAVEFILE, XBL_WITHLONGNAME )
        cFile := rtrim( cFile )

        /*agrega la extencion ZIP de ser necesario*/
        IF EMPTY( cFileExt( cFile ) )
            cFile += "
.zip"
        ENDIF
    ELSE
        /*solo pide nombre de archivo*/
        cFile := space(25)
        lOk := BoxGet( OemToAnsi("
Informa‡Æo"),                               ;
                       "
Nome do Arquivo na Unidade de Disquete <A>", @cFile )

        /*agrega al nombre de fichero de respaldo la unidad*/
        IF lOk
            /*TODO: establecer posible malas entradas por parte del usuario*/
            /*agrega unidad de diskette A al nombre de fichero dado, y de ser necesario*/
            cFile := "
A:\" + rtrim( cFile )

            /*agrega la extencion ZIP de ser necesario*/
            IF EMPTY( cFileExt( cFile ) )
                cFile += "
.zip"
            ENDIF

        ENDIF

    ENDIF

    /*actualiza nombre de directorio fuente*/
    cFolderTargetZip := cFile
    oFolderTargetZip:Refresh()

RETURN NIL

//-> Gera‡Æo(Geraci¢n) da(de la) C¢pia de Seguran‡a(seguridad)

FUNCTION DoMakeZip( oFolder, oBrowseZip )

    LOCAL lOkZip        := FALSE
    LOCAL acFiles       := {}
    LOCAL bOnZipFile    := { |cFile, nFile| UpdateMeterZip( nFile) }
    LOCAL bOnSetDiskZip := { |nDisk| MsgInfo( "
Por Favor Insira o Disco # " + ;
                              STR( nDisk,,, XBL_TRIM ) ) }

    SndPlaySound( "
Init.Wav" )

    //-> verifica que existan ficheros a respaldar y el nombre del fichero
    //-> de respaldo se haya definido
    IF  EMPTY( cFolderSourceZip ) .OR.  ;
        EMPTY( cFolderTargetZip ) .OR.  ;
        ( Len( acFilesToZip ) = 1 .AND. ;
        acFilesToZip[1,1] = "
" )

        SndPlaySound("
.\Erro.wav" )
        BEEP(4)
        MsgStop( OemToAnsi( "
Vocˆ Deve Definir um Nome Para o Arquivo " +     ;
                            "
de Seguran‡a..." ), OemToAnsi( "Aten‡Æo!!" ) )
        RETURN NIL

    ENDIF

    /*se extra solo el nombre de los ficheros a respaldar incuyendo su path*/
    AEVAL( acFilesToZip, { | aFile | AADD( acFiles, aFile[ XBL_FILEPATH ] +  ;
                             aFile[ XBL_FILENAME ] ) } )

    /*establece limites de valores de control meter*/
    oFilesCountZip:SetRange( 0, nTotalFilesToZip )
    oFilesCountZip:SetPos( 0 )

    /*desactiva botones*/
    oGetFolderSourceZip:Disable()
    oGetFolderTargetZip:Disable()
    oDoCompress:Disable()
    oClose:Disable()
    oFolder:aEnable := { .F., .F., .F. } //-> Inibe as Orelhas(Abas) Modified

    SndPlaySound("
.\Init.Wav", 0 )

    /*realiza la compresion de los ficheros*/
    IF lZipToFloppy

        hb_SetDiskZip( bOnSetDiskZip )

        lOkZip := hb_ZipFileByPKSpan( cFolderTargetZip  , ;
                                      acFiles           , ;
                                      HBL_ZIPLEVEL      , ;
                                      bOnZipFile        , ;
                                      XBL_ZIPOVERWRITE  , ;
                                      NIL               , ;
                                      XBL_ZIPWITHPATH    )
    ELSE

        hb_SetDiskZip( {|| NIL } )

        lOkZip := hb_ZipFile( cFolderTargetZip  , ;
                              acFiles           , ;
                              HBL_ZIPLEVEL      , ;
                              bOnZipFile        , ;
                              XBL_ZIPOVERWRITE  , ;
                              NIL               , ;
                              XBL_ZIPWITHPATH )
    ENDIF

    /*verifica proceso e informa al usuario*/
    IF lOkZip

        SndPlaySound("
.\Pronto.Wav" )
        BEEP(4)
        MsgInfo( OemToAnsi( "
A Grava‡Æo do Arquivo de Seguran‡a Foi " +       ;
                            "
Realizado Com Sucesso..." ),                     ;
                 OemToAnsi( "
Grava‡Æo do Arquivo" ) )
    ELSE
        SndPlaySound("
.\Erro.wav" )
        BEEP(4)
        MsgStop( OemToAnsi( "
NÆo Foi Poss¡vel Gravar o Arquivo de " +         ;
                            "
Seguran‡a..." ),                                 ;
                 OemToAnsi( "
Grava‡Æo dos Arquivos" ) )

    ENDIF

    /*activa botones*/
    oGetFolderSourceZip:Enable()
    oGetFolderTargetZip:Enable()
    oDoCompress:Enable()
    oClose:Enable()
    oFolder:aEnable := { .T., .T., .T. } //-> Inibe as Orelhas(Abas)
    oBrowseZip:Refresh()
    oBrowseZip:SetFocus()

    /*reinicia contador de meter*/
    oFilesCountZip:SetPos( 0 )
    oFilesCountZip:Refresh()

    /*limpia arreglo y llama al colecor de basura de xharbour*/
    acFiles := NIL
    hb_gcAll()

RETURN NIL

FUNCTION UpdateMeterZip( nFile )

    /*refresca sistema cada 10 ficheros procesados*/
    IF nFile % 10 = 0
        SysRefresh()
    ENDIF

    oFilesCountZip:SetPos( nFile )

    CursorWait()  //-> Modified

RETURN NIL

FUNCTION GetFileToUnZip( oBrowseUnZip )

    LOCAL cFile

    /*pide al usuario que seleccione el fichero de respaldo*/
    cFile := cGetFile( "
ZipFile   | *.zip", OemToAnsi("Nome do arquivo de Seguran‡a a ser Arquivado..."), 1, "c:\", XBL_OPENFILE, XBL_WITHLONGNAME )

    SndPlaySound( "
Init.Wav" )

    /*verifica si realmente se paso el fichero*/
    IF !EMPTY( cFile )

        /*muestra el nombre del fichero en el dialogo*/
        cSourceUnZip := cFile
        oSourceUnZip:Refresh()

        /*extrae informacion del fuchero de respaldo*/
        GetFilesFromZip( cFile, oBrowseUnZip )

    ENDIF

RETURN NIL

FUNCTION GetFilesFromZip( cFile, oBrowseUnZip )

    LOCAL aFiles := hb_GetFilesInZip( cFile, XBL_GETFULL_INFOZIP )
    LOCAL aFile

    SndPlaySound( "
Init.Wav" )

    //-> vereficia el valor retornado por la funcion, si es arreglo
    //-> y si tiene elementos
    IF ValType( aFiles ) = "
A" .AND. Len( aFiles ) > 0

        /*inicializa arreglo en cero*/
        acFilesToUnZip := {}
        nTotalFilesToUnZip := len( aFiles )

        /*procesa cada fichero extrayendo la informacion que interesa*/
        FOR EACH aFile IN aFiles
            AADD( acFilesToUnZip, { cFileName( aFile[ XBL_IZNAME ] )    , ;
                                    aFile[ XBL_IZSIZEN ] / 1024         , ;
                                    aFile[ XBL_IZSIZEC ] / 1024         , ;
                                    aFile[ XBL_IZDATE ]                 , ;
                                    cFilePath( aFile[ XBL_IZNAME ] ) } )

            /*acumula totales de tamaños de archivos - normal y comprimido*/
            nSizeFilesToUnZip  += aFile[ XBL_IZSIZEN ]
            nSizeFilesToUnZipC += aFile[ XBL_IZSIZEC ]

        NEXT

        /*obtiene los totales en Kb*/
        nSizeFilesToUnZip  /= 1024
        nSizeFilesToUnZipC /= 1024

    ENDIF

    /*pasa el arreglo al browse*/
    oBrowseUnZip:SetArray( acFilesToUnZip )
    oBrowseUnZip:Refresh( TRUE )
    oBrowseUnZip:SetFocus()

    /*limpia arreglo y llama al colecor de basura de xharbour*/
    aFiles := nil
    hb_gcAll()

RETURN NIL

FUNCTION SetFolderUnZip()

    LOCAL cDir := "
"

    /*pide al usuario de el directorio destino de los datos*/
    cDir := cGetDir( OemToAnsi("
Selecione a Pasta de Origem dos Arquivos " + ;
                               "
de Seguran‡a") )

    SndPlaySound( "
Init.Wav" )

    /*verifica si se selecciono un directorio*/
    IF EMPTY( cDir )

        SndPlaySound("
.\Erro.wav" )
        BEEP(4)
        MsgStop( OemToAnsi( "
Vocˆ Deve Definir o Local de Destino das " +     ;
                            "
Informa‡äes..."), OemToAnsi( "Aten‡Æo!!" ) )

        RETURN NIL
    ELSE
        /*muestra el nombre del directorio seleccionado*/
        cFolderTargetUnZip := cDir
        oFolderTargetUnZip:Refresh()

    ENDIF

RETURN NIL

FUNCTION DoMakeUnZip( oFolder )

    LOCAL lOkUnZip      := FALSE
    LOCAL acFiles       := {}
    LOCAL bOnUnZipFile  := { |cFile, nPos| UpdateMeterUnZip( cFile, nPos ) }
    LOCAL bOnSetDiskZip := { |nDisk| MsgInfo( "
Por Favor Insira o Disco # " + ;
                              STR( nDisk,,, XBL_TRIM ) ) }

    SndPlaySound( "
Init.Wav" )

    //-> verifica que existan ficheros a respaldar y el nombre del fichero
    //-> de respaldo se haya definido
    IF  EMPTY( cSourceUnZip )       .OR.  ;
        EMPTY( cFolderTargetUnZip ) .OR.  ;
        ( Len( acFilesToUnZip ) = 1 .AND. ;
        acFilesToUnZip[1,1] = "
" )

        SndPlaySound("
.\Erro.wav" )
        BEEP(4)
        MsgStop( OemToAnsi( "
Vocˆ Deve Definir o Local de Destino das " +     ;
                            "
Informa‡äes..."), OemToAnsi( "Aten‡Æo!!" ) )

        RETURN NIL

    ENDIF

    /*se extra solo el nombre de los ficheros a respaldar incuyendo su path*/
    AEVAL( acFilesToUnZip, { | aFile | AADD( acFiles, aFile[ XBL_UZFILEPATH ] + aFile[ XBL_UZFILENAME ] ) } )

    /*establece limites de valores de control meter*/
    oFilesCountUnZip:SetRange( 0, nTotalFilesToUnZip )
    oFilesCountUnZip:SetPos( 0 )

    /*desactiva botones*/
    oGetSourceUnZip:Disable()
    oGetFolderTargetUnZip:Disable()
    oDoUnCompress:Disable()
    oClose:Disable()
    oFolder:aEnable := { .F., .F., .F. } //-> Inibe as Orelhas(Abas) Modified

    /*realiza la compresion de los ficheros*/
    hb_SetDiskZip( bOnSetDiskZip )
    lOkUnZip := hb_UnZipFile( cSourceUnZip      , ;
                              bOnUnZipFile      , ;
                              lUnZipWithPath    , ;
                              NIL               , ;
                              cFolderTargetUnZip + "
\" )

    /*verifica proceso e informa al usuario*/
    IF lOkUnZip

        SndPlaySound("
.\Pronto.Wav" )
        BEEP(4)
        MsgInfo( OemToAnsi( "
A Restaura‡Æo do Arquivo de Seguran‡a Foi " +    ;
                            "
Realizada com Sucesso..." ),                     ;
                 OemToAnsi("
Restaura‡Æo dos Arquivos" ) )
    ELSE
        SndPlaySound("
.\Erro.wav" )
        BEEP(4)
        MsgStop( OemToAnsi( "
Erro... NÆo Foi Poss¡vel Recriar o Arquivo de " +;
                            "
Seguran‡a..." ),                                 ;
                 OemToAnsi( "
Restaura‡Æo dos Arquivos" ) )
    ENDIF

    /*activa botones*/
    oGetSourceUnZip:Enable()
    oGetFolderTargetUnZip:Enable()
    oDoUnCompress:Enable()
    oClose:Enable()
    oFolder:aEnable := { .T., .T., .T. } //-> Inibe as Orelhas(Abas)

    /*reinicia contador de meter*/
    oFilesCountUnZip:SetPos( 0 )
    oFilesCountUnZip:Refresh()

    /*limpia arreglo y llama al colecor de basura de xharbour*/
    acFiles := NIL
    hb_gcAll()

RETURN NIL

FUNCTION UpdateMeterUnZip( cFile, nPos )

    #ifdef BUG_IN_HBZIP

    STATIC n := 0

    IF n > nTotalFilesToUnZip
        n := 0
    ENDIF

    ++n
    IF n % 10 = 0
        SysRefresh()
    ENDIF

    oFilesCountUnZip:SetPos( n )

    #Else

    oFilesCountUnZip:SetPos( nPos )

    #Endif

    CursorWait()

RETURN NIL

STATIC Function FillWnd( oWnd, nColor, oBmp, nSaltos )

    Local hWnd    := oWnd:hWnd
    Local aRect   := GetClientRect( hWnd )
    Local oBrush, n
    Local nTop    := aRect[ 1 ]
    Local nBottom := aRect[ 3 ]
    Local nSteps
    Local nBlue, nRed, nGreen
    Local lPuro   := .F. // LoadIniPure() // Si es puro no hay degradado

    // Color de degradado
    DEFAULT nColor := 123123128 // LoadIni("
MADRE","DegraDialog")

    IF !EMPTY( oBmp )
        IF UPPER(oWnd:ClassName()) == 'TDIALOG' // Si es un Dialogo
            oWnd:GetDC()
            PalBmpDraw( oWnd:hDC, 0, 0, oBmp:hBitmap )
            oWnd:ReleaseDC()
        ENDIF
        WndCenter( oBmp:hWnd, oWnd:hWnd )
    ENDIF

    If lPuro == .T.
        oWnd:SetColor( 0, nColor )
        oWnd:Refresh()
     Else
        lPuro := .F.
    Endif

    If !lPuro // El color no es puro, entonces degradado

       nBlue  := nRGBBlue( nColor )
       nRed   := nRGBRed( nColor )
       nGreen := nRGBGreen( nColor)

       DEFAULT nSaltos := 3

       nSteps := ( aRect[ 3 ] - aRect[ 1 ] ) / nSaltos

       oWnd:GetDC()

       aRect[ 3 ] = 0

       For N = 1 to nSteps

           aRect[ 3 ] += nSaltos

           DEFINE BRUSH oBrush COLOR RGB( nRed, nGreen, nBlue )

           FillRect( oWnd:hDC, aRect, oBrush:hBrush )

           RELEASE BRUSH oBrush

           aRect[ 1 ] += nSaltos

           nBlue  -= 1
           nRed   -= 1
           nGreen -= 1

           If nBlue  < 0 ; nBlue  += 1   ; Endif
           If nRed   < 0 ; nRed   += 1   ; Endif
           If nGreen < 0 ; nGreen += 1   ; Endif

        Next N

        oWnd:ReleaseDC()

    Endif

Return Nil

STATIC FUNCTION Beep(SOM)

    SET CONSOLE ON

    IF SOM=1         &&Sinal de Abandono
        TONE(87.3,2)
        TONE(40,7)
    ELSEIF SOM=2  &&Abertura
        TONE(1300,8)
        TONE(1800,5)
    ELSEIF SOM=3  &&Erro
        TONE(3000,1) ; TONE(2000,1) ; TONE(1000,1)
    ELSEIF SOM=4  &&Alerta
        TONE(2500,9)
    ELSEIF SOM=5  &&Confirma‡ao-I
        TONE(5000.1)
        TONE(5000.1)
    ENDIF

    SET CONSOLE OFF

Return Nil

/*
 *  SPN.PRG
 *
 *  cShortName() - FilePath Long to Short (GetShortPathNameA())
 *
 *  Soporte a Funciones del Api de Windows
 *
 *  Andrade A. Daniel - 2002
 *  Rosario, Argentina
 *
 *  Libre Distribución
 */

/*
 *  cShortName()
 */

FUNCTION cShortName( cLong )

    Local   cShort  := Space(164) + Chr(0)
    Local   nBuffer := 164
    Local   nLen

    nLen    := GetSPName( cLong, @cShort, nBuffer )

    cShort  := Left( cShort, nLen )

RETURN( cShort )

// Windows Api
DLL32 STATIC FUNCTION GetSPName( lpszLongPath AS STRING, lpszShortPath AS STRING, lBuffer AS LONG ) ;
      AS LONG PASCAL FROM "
GetShortPathNameA" LIB "kernel32"

//-> END OF PROGRAM - FIM DO PROGRAMA
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7828
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Error UnZipFile

Postby Manuel Aranda » Sun Jul 09, 2023 4:37 pm

Thank you very much, karinha for the code. I already knew it and I'm going to try it with the latest version of xHarbour and FWH. What baffles me the most is having the same code fail with different versions of xharbour and not finding where the error is.

Enrico, thank you very much for your interest. I'll try to create a self-contained example so you can evaluate it.
Un saludo,
Manuel

xH 1.2.3, FWH 23.07 32 bits, BC++ 7.4, xVerce CW 1.0, PellesC
User avatar
Manuel Aranda
 
Posts: 604
Joined: Wed Oct 19, 2005 8:20 pm
Location: España

Re: Error UnZipFile

Postby Enrico Maria Giordano » Sun Jul 09, 2023 5:35 pm

Manuel Aranda wrote:Enrico, thank you very much for your interest. I'll try to create a self-contained example so you can evaluate it.


Thank you.
User avatar
Enrico Maria Giordano
 
Posts: 8716
Joined: Thu Oct 06, 2005 8:17 pm
Location: Roma - Italia

Re: Error UnZipFile (Resuelto)

Postby Manuel Aranda » Thu Jul 13, 2023 9:39 am

Estaba usando esta función para descomprimir que funciona correctamente hasta la vers. 1.2.0 de xHarbour
Code: Select all  Expand view  RUN

            lOkUnZip := hb_UnZipFile( cSourceUnZip      , ;
                                      bOnUnZipFile      , ;
                                      lUnZipWithPath    , ;
                                      NIL               , ;
                                      cFolderTargetUnZip + "\" )
         


Para vers. 1.2.1 de xharbour y posteriores hay que usar

Code: Select all  Expand view  RUN

           lOkUnZip := hb_UnZipFile( cSourceUnZip      , ;
                                      bOnUnZipFile      , ;
                                      lUnZipWithPath    , ;
                                      NIL               , ;
                                      cFolderTargetUnZip + "\" , ;
                                      acFiles, ;
                                      NIL )
Un saludo,
Manuel

xH 1.2.3, FWH 23.07 32 bits, BC++ 7.4, xVerce CW 1.0, PellesC
User avatar
Manuel Aranda
 
Posts: 604
Joined: Wed Oct 19, 2005 8:20 pm
Location: España

Re: Error UnZipFile (Solucionado)

Postby Antonio Linares » Thu Jul 13, 2023 10:08 am

Estimado Manuel,

gracias por compartirlo :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42107
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Error UnZipFile (Solucionado)

Postby karinha » Thu Jul 13, 2023 3:06 pm

Estimado Manuel, ¿estás usando TSBROWSE() en tu versión o XBROWSE()?

Gracias.

Regards, saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7828
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Error UnZipFile (Solucionado)

Postby Manuel Aranda » Thu Jul 13, 2023 4:31 pm

karinha wrote:Estimado Manuel, ¿estás usando TSBROWSE() en tu versión o XBROWSE()?

Gracias.

Regards, saludos.



Hola Karinha, uso Listbox
Code: Select all  Expand view  RUN

REDEFINE LISTBOX oBrowseZip FIELDS "" ;
      HEADERS "Nombre", "Tamaño", "Fecha", "Ruta" ;
      SIZES   100, 80, 80, 150 ;
Un saludo,
Manuel

xH 1.2.3, FWH 23.07 32 bits, BC++ 7.4, xVerce CW 1.0, PellesC
User avatar
Manuel Aranda
 
Posts: 604
Joined: Wed Oct 19, 2005 8:20 pm
Location: España

Re: Error UnZipFile (Solucionado)

Postby karinha » Thu Jul 13, 2023 4:54 pm

Excelente, ¿es posible enviarme la FUENTE COMPLETA a mi correo? ¿O publicar completo aquí? Si no es posible, no hay problema.

Gracias.

Regards, saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7828
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Next

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot], pedroluis and 49 guests