Lectura de ficheros comprimidos: O_ZREAD

Started by Drumpi, April 17, 2016, 03:41:45 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Drumpi

Hola a todos:

No recuerdo si esto lo llegué a preguntar antes, pero es que estoy con el editor de mapas de tiles y me ha surgido una duda.
Sé que puedo escribir ficheros comprimidos con el flag O_ZWRITE con el comando FOPEN, y después leerlos usando O_ZREAD. Creo recordar que si se usa O_ZREAD, detectaba si el fichero estaba comprimido o no, y te lo leía bien de forma automática ¿Esto es así o me lo he inventado?
Y sabiendo eso, ¿Cómo sé si un fichero está comprimido o no? Independientemente de si lo detecta o no, tengo que saberlo para que al darle a guardar respete esa opción sin tener que preguntar al usuario ¿Tengo que leer la cabecera con O_READ y si falla intentarlo con O_ZREAD?
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

darío

Te contesto sin garantías:

1 - Asumo que la compresión es GZ.

2 - Creo que si las funciones de lectura de Bennu utilizan gzwrite / gzread de la zlib (imagino que así es), dichas funciones permiten leer ficheros no comprimidos tmb y por tanto debería funcionar.

3 - Si quieres hacer una comprobación "a pelo" los archivos GZ tienen una cabecera de 2 bytes {31, 139}. Puedes abrir el fichero en modo lectura normal, comprobar los dos primeros bytes, cerrarlo y luego abrirlo con o sin compresión en función de lo que has leido.
My sites:
Smart Fpg Editor - Painless FPG Edition for Bennu and PixTudio
fenixlib - .NET support for manipulating PixTudio, Bennu and Div graphic formats

SplinterGU

Quote from: Drumpi on April 17, 2016, 03:41:45 PM
Hola a todos:

No recuerdo si esto lo llegué a preguntar antes, pero es que estoy con el editor de mapas de tiles y me ha surgido una duda.
Sé que puedo escribir ficheros comprimidos con el flag O_ZWRITE con el comando FOPEN, y después leerlos usando O_ZREAD. Creo recordar que si se usa O_ZREAD, detectaba si el fichero estaba comprimido o no, y te lo leía bien de forma automática ¿Esto es así o me lo he inventado?
Y sabiendo eso, ¿Cómo sé si un fichero está comprimido o no? Independientemente de si lo detecta o no, tengo que saberlo para que al darle a guardar respete esa opción sin tener que preguntar al usuario ¿Tengo que leer la cabecera con O_READ y si falla intentarlo con O_ZREAD?


Lo hace automatico, si no usas O_ZREAD, entonces lo abre en raw, y podrias leer el archivo en crudo y saber si esta comprimido o no (analizando los datos tu mismo).

Igual no entiendo el problema, has que tu editor los guarde directamente comprimidos y listo.

Tambien podria ser un seteo de tu editor en configuracion global y/o en la misma ventana donde pide el nombre del archivo a guardar o ventana de confirmacion de grabacion o en una ventana de propiedades del nivel, donde sea.

no le veo problema.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Drumpi

No, si la cosa es que se le de al usuario la opción de elegir si quiere que el fichero esté comprimido o no. Ya digo que si O_ZREAD le da igual que esté comprimido o no me parece genial, pero si quiero implementar los botones GUARDAR_COMO y GUARDAR, el segundo debe usar las mismas opciones del fichero original y no pedir ningún input por parte del usuario, por tanto, debo detectar de alguna forma si el fichero está comprimido o no.
No estaba seguro de si existía alguna función que me lo dijera, pero sabiendo que no, pues nada, no es problema. Es que a eso se le suma el problema de que también hay que averiguar qué tipo de fichero estamos intentando leer, porque el programa puede leer (de momento) tres formatos diferentes, lo que significa que hay 1 entre 6 posibilidades de acertar con la combinación formato-compresión.

Lo que sí me gustaría confirmar es lo que dice darío, que los ficheros comprimidos mediante O_ZWRITE comienzan con la cabecera 31-139, porque me ahorraría algunos problemas. Pero vamos, que es cuestión de escribir un mini-prg y usar un editor hexadecimal.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

SplinterGU

Download Lastest BennuGD Release: http://www.bennugd.org/node/2