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()
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