Ayuda para crear archivo .zip

120 views
Skip to first unread message

Alejandro García Garay

unread,
Sep 22, 2022, 8:56:11 AM9/22/22
to Comunidad de Visual Foxpro en Español
Saludos a todos. Necesito una pequeña colaboración, tengo una tabla cursora en donde agrego nombres de archivos de diferentes carpetas (ruta completo y nombre de archivo con extensión), requiero comprimirla en  un solo archivo .zip, intente utilizar la clase vfpcompression y aunque lo hace, me lo genera de esta manera:
-El primer archivo lo comprime bien
-Los demás le agrega la ruta completa de donde se encuentra dicho archivo
Lo necesito sin esa ruta completa solo los archivos que deseo comprimir.
Utilizo el siguiente código:

SELECT crsAnexos
IF RECCOUNT() > 0
    _nombrezip = 'Anexos_FE.zip'
    SET LIBRARY TO LOCFILE("vfpcompression.fll")
   
    ZipOpen(_nombrezip, "C:\Temp\FE\Zip\", .F.)
    SELECT crsAnexos
    SCAN
        lcNombreZip = ALLTRIM(filename)
        ZipFile(lcNombreZip)
    ENDSCAN
    ZipClose()
    SET LIBRARY TO    
ENDIF

HernanCano

unread,
Sep 22, 2022, 10:41:57 AM9/22/22
to Comunidad de Visual Foxpro en Español
Lo q pasa es que debes seguir la forma de ejecutar el comando en la forma en que se te indica para que obtengas los resultados correctos.

De acuerdo a la documentación de la función ZipFile() (se adjunta), la forma de ejecutar lo que necesitas es:

ZipFile ( lcNombreZip, .f. )

Ahora: ¿por qué no ejecutarlo así...?
       
ZipFile ( alltrim(FILENAME), .f. )


Házlo y nos cuentas.

Funcion ZipFile().png

IngeSis Ingeniería & Sistemas

unread,
Sep 23, 2022, 6:17:00 PM9/23/22
to Comunidad de Visual Foxpro en Español
Amigo, buenas tardes... te recomiendo usar la del Shell de Windows, tanto para comprimir como para descomprimir. He tenido malos ratos con estas librerías externas porque Cuando COMPRIMEN bien, luego tiene ausencias al DESCOMPRIMIR y omite archivos... en cambio con la de Windows siempre me ha funcionado perfecto y lo hago así:
*=============================================================================================*
* COMPRIMIR / DESCOMPRIMIR CON SHELL DE WINDOWS
*=============================================================================================*
*---------------------- COMPRIMIR ---------------------------
cNuevoZip = "e:\Miarchivo\"+"MiArchivo.Zip"        && Unidad y Nombre del Archivo a Generar    
cOrigen   = "e:\HOWARD\PRUEBAS"                    && Direcrorio a Comprimir y/o Grabar
Strtofile(Chr(0x50)+Chr(0x4B)+Chr(0x05)+Chr(0x06)+Replicate(Chr(0),18),cNuevoZip)
oShell = Createobject("Shell.Application")
For Each oArchi In oShell.NameSpace(cOrigen).Items
    oShell.NameSpace(cNuevoZip).CopyHere(oArchi)
Endfor

*---------------------- DESCOMPRIMIR ------------------------
cMiZip       = rr1        && Archivo ZIP
cDirDesti = rr2        && Directorio Destino

oShell = Createobject("Shell.Application")
For Each oArchi In oShell.NameSpace(cMiZip).Items
    oShell.NameSpace(cDirDesti).CopyHere(oArchi)
EndFor

Espero sea de gran ayuda. ¡Saludos!

Zarlu

unread,
Sep 23, 2022, 6:29:29 PM9/23/22
to Comunidad de Visual Foxpro en Español
Buenas tardes ingesis1 !

Ya se fue a la bóveda.

Gracias

zarlu
Chetumal, Quintana Roo, México

HernanCano

unread,
Sep 24, 2022, 8:41:54 AM9/24/22
to Comunidad de Visual Foxpro en Español
Corrijo:
La sintaxis correcta es:

ZipFile ( alltrim(FILENAME), .t. )

El parámetro se llama: IgnorarPath, en cuyo caso debe ser verdadero.
Reply all
Reply to author
Forward
0 new messages