| Clase
para crear archivos ZIP con Visual FoxPro 9
La clase ZIP.VCX esta desarrollada
en Visual FoxPro 9 y permite comprimir y descomprimir
archivos zip, para eso se usan las librerías
aZip32.dll y aUnZip32.dll. Esta librería
cuenta con la siguientes clases:

1.Clases
1.1 Interface
1.1.1 Compresión
1.1.1.1 Destino
1.1.1.2 Contraseña
1.1.1.3 Pestaña Incluir
1.1.1.4 Pestaña excluir
1.1.1.5 Comentario
1.1.2 Descompresión
1.1.2.1 Origen
1.1.2.2 Destino
1.1.2.3 Contraseña
1.3 Opciones
1.3.1 Modo de ompresión
1.3.2 Sobrescrinir
archivos en el zip
1.4 Metodos
y eventos
1.2 Zip
1.2???;?n`a?A?a?a????.1
Metodos y eventos
1.2.1.1 Metodo Objeto.Comprimir()
1.2.1.2 Metodo Objeto.Descomprimir()
1.2.1.3 Metodo Objeto.Agregar(tcArchivo,
tcOpcion)
1.3 Nota SET PATH TO
-->
DESCARGAR ZIP.VCX, EJEMPLO Y DLL´S <--
CLASE: Zip.Interface
Esta clase permite a través de una interfase
grafica permite al usuario trabajar con archivos
zip a su antojo.
COMPRESIÓN

Destino:
Es la ruta y el nombre del archivo ZIP que se
generara, por ejemplo C:/prueba.zip, utilice el
botón “…” para especificar
el archivo.
Contraseña:
Permite proteger el archivo ZIP con una
contraseña, si desea ver la contraseña
ingresada haga clic en “Mostrar Contraseña”,
para ocultarla haga clic nuevamente.
Pestaña
“Archivos a incluir”: En esta
pestaña se agregan a la lista los archivos
a respaldar, para tal fin existen cuatro botones:
- Agregar archivo: permite agregar
un archivo a la lista
- Agregar carpeta:???;?n`a?A?a?a????
Permite agregar todo el contenido de una carpeta,
para tal fin se usa el carácter *, por
ejemplo si queremos agregar todo el contenido
de una carpeta hacemos clic en el botón
Agregar carpeta, el nos muestra una ventana
donde seleccionamos la carpeta, luego nos muestra
la siguiente ventana

Si quisiéramos ingresar
todos los archivos cuyo nombre empezaran
con la letra “A” escribiríamos
I:\TRUCOS VFP\A*.*, si por el contrario
quisiéramos todos los archivos que
fueran de texto escribiríamos I:\TRUCOS
VFP\*.TXT, la opción I:\TRUCOS VFP\*.*
selecciona todos los archivos.
- Quitar: remueve de la lista de archivos el
que este seleccionado
- Limpiar: Quita de la lista todos los archivos
Pestaña
“Archivos a Excluir ”: Similar
a Archivos a incluir
Comentario:
permite agregar un comentario al archivo zip,
el botón “…” que esta
al lado permite cargar el comentario desde un
archivo de texto

DESCOMPRESIÓN

Origen:
Indica el archivo zip a descomprimir, para seleccionar
el origen haga clic en el botón “…”
que se encuentra al lado
Destino:
Especifica la carpeta en donde serán e???;?n`a?A
?a?a????xtraídos los archivos
Contraseña:
Permite desproteger el archivo ZIP en caso de
que lo estuviera
OPCIONES

Incluir sub-directorio:
hace la inserción de archivos recursiva
Incluir directorio: NO
DOCUMENTADA
Incluir directorio Vacíos:
NO DOCUMENTADA
Restaurar estructura:
Si es verdadera restaura las carpetas y subcarpetas,
de lo contrario extrae todos los archivos en el
directorio de destino y omite la estructura previa
Incluir archivos ocultos:
Si es verdadero agrega los archivos ocultos, de
lo contrario los omite
Incluir archivos del sistema
y solo lectura funcionan igugual que incluir
archivos ocultos
Modo
de compresión: La librería
aZip32.dll soporta cuatro niveles de compresión,
seleccione según su criterio, por defecto
se estable la Normal

Sobrescribir
archivos: estable la acción para
cuando los archivos a incluir ya existen en el
zip

Métodos
y propiedades de la clase Zip.Interface
 |
Comprimir:
Hace llamado al método comprimir
del objeto Zip1 y muestra resultados
Descomprimir:
Hace llamado al método descomprimir
del objeto Zip1 y muestra resultados
|
CLASE ZIP.ZIP
Esta clase se encarga de dar uso a las dll aZip32.dll
y aUnZip32.dll
Métodos
y propiedades de la clase Zip.Interface
 |
Propiedades
ArchivosExcluir
: Propiedad tipo texto que indica
los archivos que no se incluiran en el zip,
para mas de un archivo deben estar separados
por el signo | (chr(124) Ejemplo: "C:\autoexec.bat|C:\bott.ini"
ArchivosExtraer
: Propiedad tipo texto que indica
los archivos que no se extraeran del zip,
por defecto se extraeran todos (*.*), para
mas de un archivo deben estar separados
por el signo | (chr(124)
ArchivosIncluir
: Propiedad tipo texto que indica
los archivos que se incluiran en el zip,
para mas de un archivo deben estar separados
por el signo | (chr(124)
ArchivosZip
: Propiedad tipo texto que indica
la ruta???;?n`a?A?a?a???? y nombre dela
rchivo zip a comprimir o descomprimir. Ejemplo
"C:\prueba.zip"
Comentario
: Propiedad tipo texto que contiene
el comentario que se agregara en el zip
Compresion
: Propiedad tipo entero que indica
indica el nivel de compresion del archivo,
3:Maximo, 2:Normal, 1:Minimo, 0:Ninguno
Contraseña
: Propiedad tipo texto que contiene
la contraseña del archvo zip a comprimir
o descomprimir
DirectorioDestino
: Propiedad tipo texto que estable
el directorio en donde los archivos seran
extraidos
EntrarDirectorio
: NO DOCUMENTADO
EntrarDirectorioVacio
: NO DOCUMENTADO
Fresehn
: NO DOCUMENTADO
GuardarEsctructura
: Propiedad tipo entero que indicasi
se guarda la estructura de los directorios,
1:Si, 0:No
IncluirArchivosDelSistema:
1:Si, 0:No
IncluirArchivosSoloLectura:
1:Si, 0:No
IncluirOcultos:
,1:Si, 0:No
MultiVolumenes
:1:Si, 0:No
RestaurarEstructura:
1:Si, 0:No
Sobrescribir
: 1:Si, 0:No
Subdirectorios
: 1:Si, 0:No
Metodos
Agregar
: Este metodo permite adicionar al
la lista de ArchivosIncluir nuevos arcivos,
revisando que no existan y agregando | para
separarlos, tiene dos parametros, el primero
es el archivo con su ruta, el segundo si
el archivo se incluira en la lista ArchivosIncluir
+, o en la lista ArchivosExcluir
- su uso es :
Objeto.Agregar('C:/archivo.000','+')
&&Agrega un archivo a ArchivosIncluir
Objeto.Agregar('C:/archivo.000','-')
&&Agrega un archivo a ArchivosExcluir
Comprimir:
Inica el proceso para comprimir archivos,
no requiere parametros y retorna el numero
de archivos procesados
Descomprimir:
Inica el proceso para descomprimir archivos,
no requiere parametros y retorna el numero
de archivos procesados |
Metodo
Objeto.Comprimir???;?n`a?A
?a?a????span>()
WITH
this
*!* Validando propiedades antes de Iniciar
DO CASE
CASE EMPTY(.ArchivoZip)=.t.
=MESSAGEBOX('No ha definido el archivo zip
de destino',0+48+0,'Zip destino')
RETURN 0
CASE EMPTY(.ArchivosIncluir)=.t.
=MESSAGEBOX('No ha incluido archivos para
comprimir',0+48+0,'Archivos a incluir')
RETURN 0
CASE FILE('aZip32.dll')=.f.
=MESSAGEBOX('No se ha encontrado el archivo
aZip32.dll',0+16+0,'Falta archivo')
RETURN 0
OTHERWISE
*!* Declarando metodos de la API de Windows
PRIVATE HWND
DECLARE INTEGER GetActiveWindow IN win32api
HWND = GetActiveWindow()
*!* Declarando metodos
y propiedades de la API aZIP32.dll
DECLARE addZIP_Initialise IN AZIP32
DECLARE SHORT addZIP_SetParentWindowHandle
IN AZIP32 SHORT HWindow
DECLARE SHORT addZIP_ArchiveName IN AZIP32
STRING @ sArchName
DECLARE SHORT addZIP_Include IN AZIP32 STRING
@ sFileName
DECLARE SHORT addZIP_Exclude IN AZIP32 STRING
@ seFileName
DECLARE SHORT addZIP_Recurse IN AZIP32 SHORT
nRecurse
DECLARE SHORT addZIP_SetCompressionLevel
IN AZIP32 SHORT nComprLvl
DECLARE SHORT addZIP_IncludeDirectoryEntries
IN AZIP32 SHORT nInclDir
DECLARE SHORT addZIP_IncludeEmptyDirectoryEntries
IN AZIP32 SHORT nInclEDir
DECLARE SHORT addZIP_Update IN AZIP32 SHORT
nUpdate
DECLARE SHORT addZIP_SpanSizes IN AZIP32
LONG @ ulFirst, LONG @ ulOther
DECLARE SHORT addZIP_Span IN AZIP32 SHORT
nSpan
DECLARE SHORT addZIP_Register IN AZIP32
STRING @ RegName, LONG RegNum
DECLARE SHORT addZIP_Encrypt IN AZIP32 STRING
@ sPassw
DECLARE INTEG???;?n`a?A?a?a????ER addZIP
IN AZIP32
DECLARE INTEGER addZIP_Comment IN AZIP32
STRING @ lpStr
DECLARE INTEGER addZIP_SaveStructure IN
AZIP32 INTEGER Int16
DECLARE INTEGER addZIP_BuildSFX IN AZIP32
INTEGER iFlag
DECLARE INTEGER addZIP_IncludeHidden IN
AZIP32 INTEGER iFlag
DECLARE INTEGER addZIP_IncludeSystem IN
AZIP32 INTEGER iFlag
DECLARE INTEGER addZIP_IncludeReadOnly IN
AZIP32 INTEGER iFlag
*!* Iniciando proceso
addZIP_Initialise() && Iniciando
proceso
addZIP_IncludeHidden(IIF(.IncluirArchivosOcultos>1,1,.IncluirArchivosOcultos))
&& Incluir en el Zip Archivos Ocultos
addZIP_IncludeSystem(IIF(.IncluirArchivosSoloLectura>1,1,.IncluirArchivosSoloLectura))
&& Incluir en el Zip Archivos del
sistema
addZIP_IncludeReadOnly(IIF(.IncluirArchivosSoloLectura>1,1,.IncluirArchivosSoloLectura))&&
Incluir en el Zip Archivos de solo lectura
addZIP_SetParentWindowHandle(_screen.HWnd)
&& Handle
addZIP_Register(.RegistroUsuario,.RegistroLlave)
&& Registrando
addZIP_Recurse(IIF(.Subdirectorios=.t.,1,0))
&&Almacenar informacion de subdirectorios
addZIP_IncludeDirectoryEntries(IIF(.EntrarDirectorio=.t.,1,0))
&&
addZIP_IncludeEmptyDirectoryEntries(IIF(.EntrarDirectorioVacio=.t.,1,0))
&&
addZIP_SetCompressionLevel(ICASE(.Compresion<0,2,.Compresion>3,2,.Compresion))
addZIP_SaveStructure(ICASE(.GuardarEstructura<0,0,.Compresion>2,2,.GuardarEstructura))
addZIP_ArchiveName(.ArchivoZip) &&
Archivo de destino ZIP
addZIP_Include(.ArchivosIncluir) &&
Archivos a Incluir, separador por |
addZIP_Exclude(.ArchivosExcluir) &&
Archivos a excluir, separados por |
addZIP_Encrypt(.Contraseña) ???;?n`a?A
?a?a????&& Contraseña de
acceso
addZIP_Comment(.Comentario) && Comenatorio
en el archivo
addZIP_Span(.MultiVolumenes) &&
Multiples volumenes
RETURN addZIP() && Comprime y retorna
los archivos procesados
ENDCASE
ENDWITH
|
Metodo
Objeto.Descomprimir()
WITH
this
*!* Validando propiedades antes de Iniciar
DO CASE
CASE EMPTY(.ArchivoZip)=.t. OR FILE(.ArchivoZip)=.f.
=MESSAGEBOX('No ha definido el archivo zip
de origen o no exite',0+48+0,'Zip origen')
RETURN 0
CASE FILE('aUnZip32.dll')=.f.
=MESSAGEBOX('No se ha encontrado el archivo
aUnZip32.dll',0+16+0,'Falta archivo')
RETURN 0
OTHERWISE
*!* Declarando metodos de la API de Windows
PRIVATE HWND
DECLARE INTEGER GetActiveWindow IN win32api
HWND = GetActiveWindow()
*!* Declarando metodos
y propiedades de la API aUnZIP32.dll
DECLARE LONG addUNZIP IN aunzip32.DLL
DECLARE INTEGER addUNZIP_Abort IN aunzip32.DLL
INTEGER iFlag
DECLARE INTEGER addUNZIP_ArchiveName IN
aunzip32.DLL STRING filename
DECLARE INTEGER addUNZIP_Decrypt IN aunzip32.DLL
STRING cPassword
DECLARE INTEGER addUNZIP_DisplayComment
IN aunzip32.DLL INTEGER bFlag
DECLARE INTEGER addUNZIP_Exclude IN aunzip32.DLL
STRING FILES
DECLARE INTEGER addUNZIP_ExcludeListFile
IN aunzip32.DLL STRING cFile
DECLARE INTEGER addUNZIP_ExtractTo IN aunzip32.DLL
STRING cPath
DECLARE INTEGER addUNZIP_Freshen IN aunzip32.DLL
INTEGER iFlag
DECLARE INTEGER addUNZIP_GetLastError IN
aunzip32.DLL
DECLARE I???;?n`a?A?a?a????NTEGER addUNZIP_GetLastWarning
IN aunzip32.DLL
DECLARE INTEGER addUNZIP_Include IN aunzip32.DLL
STRING FILES
DECLARE INTEGER addUNZIP_IncludeListFile
IN aunzip32.DLL STRING cFile
DECLARE addUNZIP_Initialise IN aunzip32.DLL
DECLARE INTEGER addUNZIP_InstallCallback
IN aunzip32.DLL STRING funnc
DECLARE INTEGER addUNZIP_Overwrite IN aunzip32.DLL
INTEGER iFlag
DECLARE INTEGER addUNZIP_Register IN aunzip32.DLL
STRING cName, LONG lNumber
DECLARE INTEGER addUNZIP_ResetDefaults IN
aunzip32.DLL
DECLARE INTEGER addUNZIP_RestoreAttributes
IN aunzip32.DLL INTEGER iFlag
DECLARE INTEGER addUNZIP_RestoreStructure
IN aunzip32.DLL INTEGER iFlag
DECLARE INTEGER addUNZIP_SetParentWindowHandle
IN aunzip32.DLL LONG HWND
DECLARE INTEGER addUNZIP_SetWindowHandle
IN aunzip32.DLL LONG HWND
DECLARE INTEGER addUNZIP_Test IN aunzip32.DLL
INTEGER iFlag
DECLARE INTEGER addUNZIP_ToMemory IN aunzip32.DLL
STRING lpStr, LONG Uint32
DECLARE INTEGER addUNZIP_Update IN aunzip32.DLL
INTEGER iFlag
DECLARE INTEGER addUNZIP_View IN aunzip32.DLL
INTEGER bFlag
*!* Iniciando proceso
addUNZIP_Initialise()
addUNZIP_SetParentWindowHandle(_screen.HWnd)
addUNZIP_Register(ALLTRIM(.RegistroUsuario),.RegistroLlave)
addUNZIP_Decrypt(.Contraseña)
addUNZIP_RestoreStructure(.RestaurarEstructura)
addUNZIP_Freshen(.Freshen)
addUNZIP_ArchiveName(.ArchivoZip)
addUNZIP_ExtractTo(ALLTRIM(FULLPATH(.DirectorioDestino)))
addUNZIP_Include(IIF(EMPTY(.ArchivosExtraer)=.t.,'*.*',.ArchivosExtraer))
addUNZIP_Overwrite(ICASE(.Sobrescribir>12,12,.Sobrescribir<10,10,.Sobrescribir))
RETURN addUNZIP()
ENDCASE
ENDWITH
|
Metodo
Objeto.Agregar(tcArchivo, tcOpcion)
LPARAMETERS
tcArchivo as String, tcOpcion as String
*!* Dando formato
a los parametros
tcArchivo=ALLTRIM(UPPER(TRANSFORM(tcArchivo)))
tcOpcion=ALLTRIM(UPPER(TRANSFORM(tcOpcion)))
WITH this
*!* Valida parametros
DO CASE
CASE tcArchivo$.ArchivosIncluir
=MESSAGEBOX('El archivo '+tcArchivo+' Ya
se ha agregado con anterioridad',0+48+0,'Archivo',3200)
OTHERWISE
*!* Segun opcion agrega a la lista de Inlcuir
o de escluir
DO CASE
CASE tcOpcion='+'
.ArchivosIncluir=.ArchivosIncluir+IIF(EMPTY(.ArchivosIncluir)=.f.,'|','')+tcArchivo
CASE tcOpcion='-'
.ArchivosExcluir=.ArchivosExcluir+IIF(EMPTY(.ArchivosExcluir)=.f.,'|','')+tcArchivo
OTHERWISE
=MESSAGEBOX('Error de parametro, A:Inlcuir
en zip, E:Excluir en zip',0+16+0,'Parametro',6400)
ENDCASE
ENDCASE
ENDWITH |
Nota:
Se debe especificar SET PATH TO 'Carpeta'
ADDITIVE donde Carpeta es la ubicacion de
las librerias aZip32.dll y aUnZip32.dll
, por ejemplo
Ruta relativa: SET
PATH TO FULLPATH(CURDIR()+'DLL') ADDITIVE
la dll se encuentra en el directorio por
defecto en la carpeta DLL si el directorio
por defecto fuera C:\MiApp, las dll estarian
en C:\MiApp\aZip32.dll y C:\MiApp\aUnZip32.dll
|
José
Guillermo Ortiz Hernández
Programador Visual FoxPro, WEB Developer
|