Pero ademas de las funciones Clipper, el compilador ha ido añadiendo una serie de funciones nuevas (todas las que su nombre empieza por HB_... ), que muchas veces desconocemos, y que nos aportan funcionalidad extra.
Estas funciones son usadas escasamente por la comunidad de usuarios, bien porque desconoce su existencia, bien porque la documentación es excasa o nula para poderlas usar.
En la entrada de hoy vamos a centrarnos sobre dos funciones en concreto, HB_ZipFile y HB_UnZipFile, que nos va a permitir comprimir y descomprimir archivos en formato ZIP.
HB_ZipFile( cZipName, cFile | aFiles, nLevel, bBlock, lOverRide, cPassWord, lWithPath, lWithDrive, pFileProgress )
cZipName | Nombre del fichero ZIP a crear |
cFile | aFiles | Nombre del fichero a comprir o array de ficheros a comprimir. Unidad y Path pueden ser usados. |
nLevel | Nivel de compresión. De 0 a 9 |
bBlock | Code block a ejecutar mientras se comprime |
lOverRide | Sobreescribir el fichero si existe. |
cPassWord | Password para encriptar el fichero ZIP |
lWithPath | Guardar el path si/no |
lWithDrive | Guardar la unidad si/no |
pFileProgress | Code bloclk para progreso de archvios. |
HB_UnZipFile( cFile, bBlock, lWithPath, cPassword, cPath, cFile | aFiles, FileProgress )
cFile | Nombre del fichero a descomprimir |
bBlock | Code block a ejecutar a medida que se va descomprimiendo |
lWithPath | Permitir crear directorios si es necesario |
cPassWord | Contraseña a usar para descomprimir el fichero |
cPath | Path donde estraer los ficheros |
cFile | aFiles | Nombre de un archivo, o array de nombres de archivos a extraer |
pFileProgress | Code block para visualizar progreso de los ficheros |
Las dos funciones retorman un valor booleano, informandonos si el proceso a concluido con éxito.
Veamos un primer ejemplo sencillo de comprimir / descomprimir.
Vamos a complicarlo y elaborarlo un poco mas, en el fondo haremos lo mismo, pero con una barra de evolución tanto para comprimir como descomprimir. Simplemente haremos uso de los parametros adicionales que nos permiten ejecutar codeblocks.
Como podeis ver en el fuente, hemos creado dos funciones comprime y descomprime, que son muy sencillas de usar. Comprime recibe dos parámetros, nombre del fichero zip que queremos crear, y array (arreglo) con los ficheros que queremos comprimir. Descomprime recibe como único parámetro el nombre del fichero ZIP a descomprimir.
En el interior de cada una de las funciones creamos un dialogo para visualizar la evolución, y montamos e code block necesario para que se vaya actualizando.
Como visteis al principio existen más parámentros en la función HB_ZipFile y Hb_UnZipFile, se trata de que vayais experimentando con ellos y usando los que os hagan falta. Este ejemplo es un ejemplo básico, pero creo que cubre las necesidades más comunes de compresión y descompresión.
Existen una serie de funciones adicionales para manejo de ficheros Zip, pero os las dejo para que vosotros mismos las investigueis, en descomprime por ejemplo hacemos uso de hb_GetFilesInZip ,para determinar el número de archivos contenidos en el fichero comprimido.
Ya habeis visto que no es nada complicado, si solo quereis comprimir / descompriir, con dos funciones y usando dos parámetros ya lo esta listo.
El último escollo, pero también importante, es linkar las librerías adecuadas para poder hacer uso de las funciones de manejo de ficheros ZIP.
Las librerias a ñadir a vuestro proyecto son:
hbZiparc.lib
hbmzip.lib
hbzlib.lib
Descargar fuentes
Espero que os sea de utilidad, saludos desde Mallorca.
Biel Maimó