https://foro.gambas-es.org/viewtopic.php?f=1&t=57&p=148#p148
-----------------------------------
soplo
Lunes, 21 Septiembre 2009, 20:31

Compresión/Descompresión De Archivos En Gambas
-----------------------------------
[color=darkgreen][size=14]Compresión[/size][/color]
La clase Compress permite utilizar los algoritmos de compresión Bz2 y gz.
Requiere que estén instaladas las librerías las librerías "libz" y "libbz2" para poder utilizar ambos métodos o bien una de ellas para poder utilizar uno de los métodos

[color=darkred]Definición[/color]
[code linenumbers=false]Dim Comprimir as new Compress[/code]

[color=darkred]Propiedad type[/color]
Define el tipo de compresión a utilizar. Puede tener los siguientes valores
zlib ---> para crear archivos .gz
bzlib2 ---> para crear archivos bz2
[code linenumbers=false]Comprimir.type="zlib"[/code]

[color=darkred]Propiedad Max/Min/Default[/color]
Define el nivel de compresión. Max para máximo, Min, para mínimo y default para el nivel por defecto para el tipo de compresión especificado por type. A mayor compresión menor velocidad.

[color=darkred]Comprimir un archivo a otro archivo[/color]
Se utiliza el método file que tiene el siguiente formato:
file(origen,destino,nivel)
origen ---> path completo de archivo a comprimir
destino ---> path completo de archivo comprimido
nivel --->Nivel de compresión que puede valer Min, Max o default. Si no se especifica se usará default[code linenumbers=false].
Dim comprimir as new Compress

Comprimir.type="zlib"
Comprimir.file(user.home & "/aplicacion.log",user.home & "/aplicacion.log.gz",Comprimir.max)[/code]

[color=darkred]Abrir un fichero comprimido para agregar datos[/color]
se utiliza el método open que tiene el siguiente formato:
open(archivo,nivel)
donde archivo es el archivo comprimido y nivel es el nivel de compresión a utilizar.
Una vez abierto se utiliza como cualquier otro stream.
[code linenumbers=false]Dim Comprimir as new Compress

Comprimir.type="zlib"
Comprimir.open(user.home & "/aplicacion.log.gz",Comprimir.max)
print #Comprimir, "nuevo dato a agregar al archivo"
print #Comprimir, "nuevo dato a agregar al archivo"
print #Comprimir, "nuevo dato a agregar al archivo"
print #Comprimir, "nuevo dato a agregar al archivo"
close #Comprimir[/code]

[color=darkred]Comprimir un string en memoria[/color]
Para ello está el método string que tiene el siguiente formato:
StringComprimido=string(StringOriginal,nivel,mayor)
StringOriginal ---> string a comprimir
nivel ---> nivel de compresión a utilizar
Mayor --> es un valor booleano cuyo sentido es
   FALSE ----> Se comprime solo si el resultado comprimido es menor que el original
   TRUE ----> Siempre comprime aunque el resultado obtenido sea igual o mayor que el original.

[code linenumbers=false]Dim Comprimir as new compress, Cadena as string

Comprimir.type="zlib"
Cadena=Comprimir.string(textbox.text,Comprimir.max,false)
[/code]

[color=darkgreen][size=14]Descompresión[/size][/color]
Utiliza la clase uncompress.

Requiere que estén instaladas las librerías las librerías "libz" y "libbz2" para poder utilizar ambos métodos o bien una de ellas para poder utilizar uno de los métodos

[color=darkred]Propiedad type[/color]
Define el tipo de compresión a utilizar. Puede tener los siguientes valores
zlib ---> para crear archivos .gz
bzlib2 ---> para crear archivos bz2
[code linenumbers=false]Desomprimir.type="zlib"[/code]

[color=darkred]Descomprimir un archivo[/color]
Se utiliza el método file que tiene el siguiente formato:
file(origen,destino)
origen ---> path completo de archivo a comprimir
destino ---> path completo de archivo comprimido
linenumbers=false].
[code linenumbers=false]Dim Descomprimir as new unCompress

Descomprimir.file(user.home & "/aplicacion.log.gz",user.home & "/aplicacion.log"
[/code]

[color=darkred]Leer el contenido de un archivo comprimido[/color]
se utiliza el método open que tiene el siguiente formato:
open(archivo,nivel)
donde archivo es el archivo comprimido y nivel es el nivel de compresión a utilizar.
Una vez abierto se utiliza como cualquier otro stream.
[code linenumbers=false]Dim Descomprimir as new Uncompress, Cadena as string

Descomprimir.type="zlib"
Descomprimir.open(user.home & "/aplicacion.log.gz")
Line Input #Descomprimir, "Dato leído",Cadena
...
close #Descomprimir[/code]

[color=darkred]Descomprimir en memoria una string[/color]
Para ello está el método string que tiene el siguiente formato:
StringSinComprimir=string(StringComprimido)

[code linenumbers=false]Dim descomprimir as new uncompress, Cadena as string

Cadena = ... 'valor de un string comprimido
Descomprimir.type="zlib"
textbox.text=Descomprimir.string(cadena)
[/code]


