Error UnZipFile (Solucionado)

Re: Error UnZipFile (Solucionado)

Postby Manuel Aranda » Fri Jul 14, 2023 7:50 am

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

Gracias.

Regards, saludos.



Aquí lo tienes, sólo es una adaptación de xBlite (y mis disculpas por la "suciedad" del código, hace más de quince años que no lo tocaba)
Code: Select all  Expand view

#include "FiveWin.ch"
#include "copias.ch"
Static oDlg
Static oSayP,oSayE
Static Display, Numero, Almacen
Static lNuevo, AntOpera, Previa
Static Moneda
Static aoBtn[ 9 ]
STATIC aMES,aDIA

/////////////////////////////////////////////////////////
//copiascomprimidas  COPIASZIP()
#define ZIP_NAME  1
#define ZIP_BLOCK 2
#define ZIP_MSG   3

#define NL  Chr( 10 ) + Chr( 13 )

static nActualSize
static nFileSize
static cFilePath
static aFiles
static nActualFile
static aMsgs
static nTotalFiles
////////////////////////////////////////////////////////
#define FILE_OFFSET   7

static cZipName

*************************************
FUNCTION COPIASZIP()
*************************************
   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))

   /*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("FRECU.DBF", "FRECU.DDD")
   //
   /*valores inciaiales de seccion zip*/
   cFolderSourceZip    := ""
   cFolderTargetZip    := cFilePath(cDestino)+"ArchivoZIP"+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("FRECU.DDD", "FRECU.DBF")
      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->(DbCommit())
         FRECU2->(DbRunLock())

      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)
*************************************
   LOCAL oFont
   LOCAL oDlg
   LOCAL oBrowseUnZip
   Local cModulo:=GetModuleFilename(GetInstance())
   Local cDir:=SUBSTR(ALLTRIM(cModulo),1,LEN(ALLTRIM(cModulo))-11)
   Local oCursorMano
   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 );
          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 )
   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 compresion de los ficheros*/
            hb_SetDiskZip( bOnSetDiskZip )



            //Para vers. 1.2.1 de xharbour
            lOkUnZip := hb_UnZipFile( cSourceUnZip,bOnUnzipFile,lUnZipWithPath ,NIL,cFolderTargetUnZip+"
\",acFiles,NIL )


            /*
            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.)
               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

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



Código de copias.ch
Code: Select all  Expand view

#include "fivewin.ch"
#include "common.ch"
#include "directry.ch"

/*color del browse*/
#define CLR_YELLOW01  RGB(255,255,230)
#define CLR_PIEL1     RGB(216,185,165)
#define CLR_PIEL2     RGB(192,192,192)
#define CLR_MENTA1    RGB(175,255,215)
#define CLR_MENTA2    RGB(221,255,238)
#define CLR_DISABLE   RGB(255,255,217)
#define CLR_AMARILLO1 RGB(255,251,225)
#define CLR_BLUE1     RGB(231,220,228)
#define CLR_GRAY1     RGB(217,237,217)


/*directory y directoryrecurse*/
#define XBL_FILEWITHPATH    TRUE    //incluir ruta en nombre de archivo

/*cGetFile*/
#define XBL_SAVEFILE        TRUE    //nuevo fichero
#define XBL_OPENFILE        TRUE    //abrir fichero
#define XBL_WITHLONGNAME    TRUE    //nombre de ficheros largos

/*acFilesToZip - columnas del browse de Zip*/
#define XBL_FILENAME        1       //nombre de fichero
#define XBL_FILESIZE        2       //tamaño de fichero
#define XBL_FILEDATE        3       //fecha de fichero
#define XBL_FILEPATH        4       //ruta de fichero

/*hb_ZipFile y hb_ZipFileByPKSpan*/
#define HBL_ZIPLEVEL        9       //nivel de compresión
#define XBL_ZIPOVERWRITE    TRUE    //sobre escribir fichero
#define XBL_ZIPWITHPATH     TRUE    //incluir unidad
#define XBL_ZIPWITHDRIVE    TRUE    //incluir ruta

/*str*/
#define XBL_TRIM            TRUE    //define que a cadena se elimina espacios en blanco

/*hb_GetFilesInZip*/
#define XBL_GETFULL_INFOZIP TRUE
#define XBL_IZNAME          1       //nombre de fichero
#define XBL_IZSIZEN         2       //tamaño real de fichero
#define XBL_IZMETHOD        3       //metodo de compresión
#define XBL_IZSIZEC         4       //tamaño comprimido del fichero
#define XBL_IZPERCMP        5       //porcentaje de compresión
#define XBL_IZDATE          6       //fecha del fichero
#define XBL_IZCRC           7       //crc del fichero
#define XBL_IZFILEATTR      8       //attributos del fichero

/*acFilesToUnZip - columnas del browse de UnZip*/
#define XBL_UZFILENAME      1       //nombre del fichero sin ruta
#define XBL_UZFILESIZEN     2       //tamaño del fichero
#define XBL_UZFILESIZEC     3       //tama del fichero comprimido
#define XBL_UZFILEDATE      4       //fecha de fichero
#define XBL_UZFILEPATH      5       //ruta del fichero

/*bug in hb_unzip*/
#define BUG_IN_HBZIP                //define que Hb_UnZip tiene un Bug en los parametros del bloque de progreso por archivo "nPos -> NIL"

/*comando para depuración*/
#xcommand ??? <xData> [, <xDataN> ] => OutPutDebugString( <xData> ) ;
                                    [; OutPutDebugString( <xDataN>) ]

 
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 » Fri Jul 14, 2023 12:58 pm

Manuel, muchas gracias. voy hacer cambios en mi version.

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

Previous

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 52 guests