hb_UnZipFile con Harbour

Post Reply
User avatar
Armando
Posts: 3249
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México
Contact:

hb_UnZipFile con Harbour

Post by Armando »

Amigos:

Un ejemplo de hb_UnZipFile con Harbour?, por favor!

Code: Select all | Expand

      IF ! hb_UnZipFile( cPathFile,,(.F.),,cDirGlb,aFilInZip)
         MsgStop("Falló la descompresión, posiblemente el archivo ZIP está dañado !",cAppName)
         RETURN(.F.)
      ENDIF
 
No me tira error pero el array cDirClb y aFilInZip me los devuelve vacios
Uso Harbour

Saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
User avatar
Manuel Aranda
Posts: 605
Joined: Wed Oct 19, 2005 8:20 pm
Location: España

Re: hb_UnZipFile con Harbour

Post by Manuel Aranda »

Hola Armando,

No sé si has mirado esto: https://forums.fivetechsupport.com/view ... =unzipfile

El mismo código me funciona también con harbour.
Un saludo,
Manuel

xH 1.2.3, FWH 23.07 32 bits, BC++ 7.4, xVerce CW 1.0, PellesC
User avatar
Willi Quintana
Posts: 1023
Joined: Sun Oct 09, 2005 10:41 pm
Location: Cusco - Perú
Contact:

Re: hb_UnZipFile con Harbour

Post by Willi Quintana »

Mi estimado

Code: Select all | Expand

*cFile      archivo zip  
*cPass     password si lo tiene el zip
cFTem   := GetEnv("TMP") + "\"   ***ruta donde se desziperan los archivos
aFile := HB_GETFILESINZIP( cFile )            ***array con los archivos zipeados
If !HB_UNZIPFILE( cFile, , .t., cPass, cFTem, aFile)
Return(.f.)
EndIf
Return(.t.)
User avatar
Armando
Posts: 3249
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México
Contact:

Re: hb_UnZipFile con Harbour

Post by Armando »

Amigos:

Manuel ya había visto tu post, de ahi tome el ejemplo
Willi, gracias por tu código

Gracias a ambos por sus respuestas las he mirado pero tal vez tengo ceguera de taller
pues no logro el objetivo, pongo mi código que no me funciona por si encuentran mi error.

Code: Select all | Expand

      // Determinamos cuantos y cuales archivos hay en el ZIP
      aFilInZip   := hb_GetFilesInZip(cPathFile,(.F.)) 
      ? aFilInZip                                                                                                 <== Aquí me muestra un valor de 1801
      // Descomprimimos el archivo ZIP
      IF ! hb_UnZipFile( cPathFile,,(.F.),,cDirGlb,aFilInZip,)                                                    <== cPathFile es correcto y cDirGlb existe
         MsgStop("Falló la descompresión, posiblemente el archivo ZIP está dañado !",cAppName)                    <== Este mensaje no aparece
         // Borramos el directorio
         lRmDir(cDirGlb)
         RETURN(.T.)
      ELSE
         aFilInDir         := Directory(cDirGlb + "*.Xml" )
         ? Len(aFilInDir)                                                                                         <== Aquí me muestra 0
      ENDIF
 
Muchas gracias por su tiempo
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
User avatar
Antonio Linares
Site Admin
Posts: 42259
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: hb_UnZipFile con Harbour

Post by Antonio Linares »

Estimado Armando,

Prueba con:

Directory(cDirGlb + "\*.Xml" )
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Armando
Posts: 3249
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México
Contact:

Re: hb_UnZipFile con Harbour

Post by Armando »

Master Antonio:

Gracias por tu respuesta

? cDirGlb <==== C:\AppXmls\092023\

Como ves, ya incluye la última diagonal inversa.

Saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
User avatar
karinha
Posts: 7885
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil
Contact:

Re: hb_UnZipFile con Harbour

Post by karinha »

Armando, muestre:

Code: Select all | Expand

   cDirGlb
 
ó la FUNCTION completa, porfa.

https://forums.fivetechsupport.com/view ... 37&start=0

PBACKUP para HARBOUR:

https://mega.nz/file/II9GTBLZ#h4aAe8VgD ... 3ekImYvOFg

Armando: Compila perfecto con HARBOUR para BCC7.60.

Regards, saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
Armando
Posts: 3249
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México
Contact:

Re: hb_UnZipFile con Harbour

Post by Armando »

Amigos:

Encontré el problema, el código es correcto, el problema radica en que los ficheros
a extraer están en una carpeta y la carpeta dentro del ZIP y el código espera que los
ficheros formen el ZIP, espero haberme explicado.

FICHERO.ZIP
|
|-----> 092023 <===== esta es la carpeta (NO SIEMPRE ES EL MISMO NOMBRE)
|
|------> Fichero1.xml
|------> Fichero2.xml
|------> etc. etc.

Ahora como especifico que busque los ficheros dentro de la carpeta???

Gracias por su tiempo y paciencia

Saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
User avatar
karinha
Posts: 7885
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil
Contact:

Re: hb_UnZipFile con Harbour

Post by karinha »

Armando, mira se ayuda:

Code: Select all | Expand

// C:\FWH..\SAMPLES\UNZIP2.PRG simples teste. kapiabafwh@gmail.com

#include "FiveWin.ch"
#Include "Directry.ch"

#Define CLR_PINK       nRGB( 255, 128, 128 ) //-> Rosa. uiiii. kkkkkk
#Define CLR_NBLUE      nRGB( 128, 128, 192 )
#Define CLR_MSPURPLE   nRGB( 0,   120, 215 ) //-> Purpura.
#Define CLR_MSRED      nRGB( 232,  17,  35 )
#Define CLR_MSGRAY     nRGB( 229, 229, 229 )
#Define CLR_LGRAY      nRGB( 230, 230, 230 )

FUNCTION Main()

    MEMVAR cPRGPATH, cFILEPATH

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

    XBACKUP()

    lCHDIR(cPRGPATH)

RETURN NIL

FUNCTION XBACKUP()

   LOCAL oDlg, oFont, cDest, cArqZip, aDir1, vPasta, X, nTotal
   LOCAL cTipo    := "1"
   // LOCAL cDestino := LEFT("C:\"+CurDir()+SPACE(100),100)
   LOCAL cDestino
   // archivos de Origen:
   // LOCAL cOrigem  := LEFT("C:\"+CurDir()+"\*.PRG"+SPACE(100),100)
   LOCAL cOrigem
   LOCAL cSenha := SPACE(10)
   LOCAL oBtn, oBtn2, oSaida, aGrad, oBrush1, oBrush2, aArq := {}
   LOCAL c_ExtArq:="zip"  //extensao do arquivo que sera criado
   LOCAL oCursorBtn := TCursor():New(, 'HAND' )

   // De onde pegar os arquivos:
   cOrigem  := Curdrive()+":\fwh1905\samples\*.PRG"
   cDestino := Curdrive()+":\backup\"  // "C:\BACKUP"

   // ? cDestino  // "C:\BACKUP"  // donde guardar la copia

   IF .NOT. lIsdir( cDestino )
      LMkdir( cDestino )
   ENDIF

   SetBalloon( .T. )

   aGrad := { { 0.30, CLR_MSGRAY, CLR_MSPURPLE },{ 0.50, CLR_MSPURPLE, CLR_MSGRAY }, .F. }

   DEFINE BRUSH oBrush1 COLOR nRGB( 250, 213, 174 ) STYLE HORIZONTAL
   DEFINE BRUSH oBrush2 COLOR nRGB( 192, 192, 192 ) STYLE HORIZONTAL

   DEFINE FONT oFont NAME "Ms Sans Serif" SIZE 00, -35 BOLD
                      
   DEFINE DIALOG oDlg TITLE "FIVEWIN:- BACKUP - RESTORE -" SIZE 350, 350   ;
      PIXEL TRUEPIXEL RESIZABLE GRADIENT aGrad

   @ 050, 75 BTNBMP oBtn OF oDlg SIZE 200, 70 NOBORDER ADJUST TRANSPARENT   ;
      FILE "..\bitmaps\butt1upD.bmp", "..\bitmaps\butt1do.bmp",nil,         ;
           "..\bitmaps\butt1upL.bmp"                                        ;
      FONT oFont COLOR CLR_PINK, CLR_BLACK PROMPT "&BACKUP" CENTER          ;
      ACTION ( cTipo := "BACKUP", oDlg:End() )                              ;
      TOOLTIP "Backup"

   oBtn:bClrGrad = {| lInvert | If( ! lInvert, ;
      { { 0.25, RGB( 245, 245, 235 ), RGB( 250, 250, 245 ) }, ;
      { 0.75, RGB( 250, 250, 245 ), RGB( 245, 245, 235 ) } }, ;
      { { 0.25, RGB( 250, 250, 245 ), RGB( 245, 245, 235 ) }, ;
      { 0.75, RGB( 245, 245, 235 ), RGB( 250, 250, 245 ) } } ) }

   oBtn:nClrBorder := iif( oBtn:lMOver, RGB( 219, 230, 244 ), RGB( 219, 230, 244 ) )
   oBtn:oCursor    := oCursorBtn

   @ 150, 75 BTNBMP oBtn2 OF oDlg SIZE 200, 70 NOBORDER ADJUST TRANSPARENT  ;
      FILE "..\bitmaps\butt1upD.bmp", "..\bitmaps\butt1do.bmp",nil,         ;
           "..\bitmaps\butt1upL.bmp"                                        ;
      FONT oFont COLOR CLR_PINK, CLR_BLACK PROMPT "&RESTORE" CENTER         ;
      ACTION ( cTipo := "RESTORE", oDlg:End() )                             ;
      TOOLTIP "Restore"

   oBtn2:bClrGrad = {| lInvert | If( ! lInvert, ;
      { { 0.25, RGB( 245, 245, 235 ), RGB( 250, 250, 245 ) }, ;
      { 0.75, RGB( 250, 250, 245 ), RGB( 245, 245, 235 ) } }, ;
      { { 0.25, RGB( 250, 250, 245 ), RGB( 245, 245, 235 ) }, ;
      { 0.75, RGB( 245, 245, 235 ), RGB( 250, 250, 245 ) } } ) }

   oBtn2:nClrBorder := iif( oBtn2:lMOver, RGB( 219, 230, 244 ), RGB( 219, 230, 244 ) )
   oBtn2:oCursor    := oCursorBtn

   @ 250, 75 BTNBMP oSaida OF oDlg SIZE 200, 70 NOBORDER ADJUST TRANSPARENT ;
      FILE  "..\bitmaps\butt1upD.bmp", "..\bitmaps\butt1do.bmp",nil,        ;
            "..\bitmaps\butt1upL.bmp"                                       ;
      FONT oFont COLOR CLR_PINK, CLR_BLACK PROMPT "&EXIT" CENTER            ;
      ACTION ( cTipo := "SAIDA", oDlg:End() )                               ;
      TOOLTIP "Exit/Salida"

   oSaida:bClrGrad = {| lInvert | If( ! lInvert, ;
      { { 0.25, RGB( 245, 245, 235 ), RGB( 250, 250, 245 ) }, ;
      { 0.75, RGB( 250, 250, 245 ), RGB( 245, 245, 235 ) } }, ;
      { { 0.25, RGB( 250, 250, 245 ), RGB( 245, 245, 235 ) }, ;
      { 0.75, RGB( 245, 245, 235 ), RGB( 250, 250, 245 ) } } ) }

   oSaida:nClrBorder := iif( oSaida:lMOver, RGB( 219, 230, 244 ), RGB( 219, 230, 244 ) )
   oSaida:oCursor    := oCursorBtn

   oSaida:lCancel := .T.

   ACTIVATE DIALOG oDlg CENTERED

   IF cTipo != "SAIDA"

      ? "Tipo: ", cTipo, cDestino, cOrigem

   ENDIF

   IF cTipo = "RESTORE"

      cOrigem := Curdrive()+":\backup\BACKUP.ZIP"

   ENDIF

   IF .NOT. FILE( AllTrim( cOrigem ) )

      Alert( "Arquivo: " + AllTrim( cOrigem ) + "; Nao encontrado(bakcup.zip)!" )

      RETURN NIL

   ENDIF

   IF Right( AllTrim( cDestino ), 1 ) != "\"

      cDest := AllTrim( cDestino ) + "\NUL"

      cArqZip := AllTrim( cDestino ) + "\backup." + c_ExtArq

   ELSE

      cDest := AllTrim( cDestino ) + "NUL"

      cArqZip := AllTrim( cDestino ) + "backup." + c_ExtArq

   ENDIF

   IF .NOT. FILE( cDest )

      Alert( "O Drive: " + AllTrim( cDestino ) + "; Nao encontrado!" )

      RETURN NIL

   ENDIF

   IF cTipo = "BACKUP"  // BACKUP

      aArq := {}

      IF "*" $ cOrigem

         aDir1 := Directory( AllTrim( cOrigem ) )

         vPasta := LEFT( cOrigem, RAt( "\", cOrigem ) )

         FOR x = 1 TO Len( aDir1 )

            AAdd( aArq, vPasta + aDir1[ x, 1 ] )

         NEXT

      ELSE

         AAdd( aArq, AllTrim( cOrigem ) )

      ENDIF

      nTotal := Len( aArq )

      hb_zipfile( cArqZip, aArq, 9, {| cFile, nPos | eProgresso( cFile, nPos, nTotal ) }, .T., , , .F., .F., )

      ? "Backup Listo"

   ELSE // RESTORE

      cDest := AllTrim( cDestino )

      IF Right( AllTrim( cDestino ), 1 ) != "\"

         cDest += "\"

      ENDIF

      aArq := hb_GetFilesInZip( AllTrim( cOrigem ) )

      nTotal := Len( aArq )

      hb_UnzipFile( AllTrim( cOrigem ), {| cFile, nPos | eProgresso( cFile, nPos, nTotal ) },,, cDest, aArq )

      ? "Restore Listo"

   ENDIF

RETURN NIL

FUNCTION eProgresso(vtxt,xPerc,wTot)

   Local nPre:=(xPerc*100)/wTot, nBar:=(nPre*74)/100

   // Completar aqui depois...

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"

// FIN / END
Regards, saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
Antonio Linares
Site Admin
Posts: 42259
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: hb_UnZipFile con Harbour

Post by Antonio Linares »

Estimado Armando,

Esto te da las subcarpetas:
aFilInDir := Directory( cDirGlb + "*.*", "D" )
? Len( aFilInDir ) // dinos que cantidad te aparece aqui

Ahora usa el segundo nombre, que debe ser la carpeta, como path:
aFilInDir := Directory( cDirGlb + aFilInDir[ 2 ] + "\", *.Xml" )
? Len( aFilInDir )
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Armando
Posts: 3249
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México
Contact:

Re: hb_UnZipFile con Harbour

Post by Armando »

Master Antonio:

Hecho, muchas gracias.

Saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
Post Reply