Page 1 of 1

descomprimir archivo zip

Posted: Tue Jun 04, 2013 11:25 pm
by surGom
Hola compañeros, hace años que tengo una función para comprimir los dbf y ftp para tener un backup. Nunca hice que el programa los descomprimiera, ahora necesito hacerlo pero no puedo hacerlo funcionar. Uso los ejemplos del blog de xBielsys.

probé primeramente con

Code: Select all

 FUNCTION descomprime()

                   
                if   hb_UnZipFile("k:\fivehme\prueba\archivo.zip")
                     ? "exito "
                else
                     ? "no"
                endif    

[code]

el resultado es no

y luego

[code] FUNCTION descomprime()

   LOCAL oDlg,nFiles,oText, cMsg, oMeter,nActual:=0
   LOCAL cFile :=  cGetfile("archivo(*.zip) |*.zip|","Seleccionar archivo")
   LOCAL lval := .t.
   LOCAL cDestino := cgetdir()

   
   nFiles:=Len(hb_GetFilesInZip(cFile))      


 
   DEFINE DIALOG oDlg FROM 1, 1 TO 10, 60 TITLE "Espere ejecutando recuperación de datos..."

   @ 0.5, 2  SAY oText VAR cMsg SIZE 180, 20 OF oDlg

   @ 2, 2 METER oMeter VAR nActual TOTAL 100 OF oDlg SIZE 200, 20

   oDlg:bStart:={||lval:= hb_UnZipFile(cFile,{|cFile,nPos|oText:SetText('Descomprimiendo'+CRLF+cFile),;
                                                         nActual:=nPos/nFiles*100,oMeter:Set(nActual)},,,cDestino ),;
                          IF(lval,MsgInfo('Restauracion completada con éxito'+CRLF+CRLF,'Bielsys 2009'),;
                           MsgStop('No se han podido restaurar los datos')),;
                   oDlg:END()}       


   ACTIVATE DIALOG oDlg CENTERED

RETURN NIL
el resultado también es negativo

El archivo que quiero descomprimir es el creado con la función hb_zipfile. Si uso el winrar los muestra perfectamente

utilizo xharbour 1.21 y bcc582

Gracias por su atención

Re: descomprimir archivo zip

Posted: Wed Jun 05, 2013 12:11 am
by Armando
Surgom:

Yo utilizo este código con xHarbour y FW0810 y va bien.

Code: Select all

/*
* -------------------------------------------------------------------------*
* -------------------------------------------------------------------------*
*/
FUNCTION Importar()
LOCAL aFiles
LOCAL aExtra    := {""}
LOCAL lStatus
LOCAL nVez  := 0

CursorWait()

aFiles := hb_GetFilesInZip(cZipFile)

FOR nVez := 1 TO LEN(aFiles)
    IF ALLTRIM(cFileExt(aFiles[nVez])) == "ETI"
        AADD(aExtra,aFiles[nVez])
    ENDIF
NEXT

lStatus := hb_UnZipFile(cZipFile,,(.T.),,cDirDest,aExtra,NIL)

IF lStatus
    MsgInfo("El archivo se importó exitosamente !",oApp:cAplicacion)
ENDIF
RETURN (.T.)
 
Saludos

Re: descomprimir archivo zip

Posted: Wed Jun 05, 2013 4:03 am
by AIDA

Re: descomprimir archivo zip

Posted: Wed Jun 05, 2013 5:18 am
by LuisPonce
Aida

Yo también pase por lo mismo, y en el foro encontré respuestas, hice una pequeña variación que muestro y quedó así:

Descomprime(cFileZip,cPathDesempaque)


FUNCTION Descomprime(cFile,cPathDescarga)
LOCAL oDlg,nFiles,aFiles,oText, cMsg, oMeter,nActual:=0

DEFAULT cPathDescarga:="E:\"

IF FILE(cFIle)

aFiles:=hb_GetFilesInZip(cFile)
// aFiles:=hb_GetFilesInZip(cFile,.t.)
nFiles:=Len(hb_GetFilesInZip(cFile)) // yo hice esta variacion que quite el .t. y desempaca en cPathDescarga


DEFINE DIALOG oDlg FROM 1, 1 TO 10, 60 TITLE "Espere ejecutando recuperación de datos..."
@ 0.5, 2 SAY oText VAR cMsg SIZE 180, 20 OF oDlg
@ 2, 2 METER oMeter VAR nActual TOTAL 100 OF oDlg SIZE 200, 20
oDlg:bStart:={||lVal:=Hb_UnZipFile(cFile,{|cFile,nPos|oText:SetText("Descomprimiendo"+CRLF+cFile),;
nActual:=nPos/nFiles*100,oMeter:Set(nActual)},.T.,,cPathDescarga,aFiles,NIL ),;
IF(lVal,MsgInfo("Restauracion completada con éxito"+CRLF+CRLF,cVersion),;
MsgStop("No se han podido restaurar los datos")),;
oDlg:END()}

ACTIVATE DIALOG oDlg CENTERED

ENDIF

RETURN NIL


Ojo: en tu fichero de enlace agrega : hbzip.lib y zlib.lib

Re: descomprimir archivo zip

Posted: Wed Jun 05, 2013 12:08 pm
by surGom
Gracias a todos funciona bien, hoy iba a probar con poner el array de los archivos comprimidos, me pareció que por ahí iba el problema y Uds me los confirmaron.


Otra vez muchas gracias

Luis