PDA

Visualizza la versione completa : leggere file zippati [C]


71lucky
23-07-2012, 15:42
Ciao a tutti,

in un programma C ho la necessita' di inserire l'opzione per aprire un file compressato con estensione .gz o .zip, in read mode.
Il programma gira in ambiente unix.

C'e' qualche funzione particolare che mi permetta di farlo, senza dovere tutte le volte eseguire da riga di comando "gzip -d nomefile", prima di eseguire il programma?

grazie e ciao

Lucky

linoma
23-07-2012, 15:46
Puoi usare la zlib (http://zlib.net/) ed includere nel prg le funzionalita' dei formati indicati

71lucky
23-07-2012, 15:53
Grazie Linoma!

Ora provo a guardare come funziona.

Nel caso ti disturbo ancora ;-)

71lucky
23-07-2012, 19:00
Nel mio programma ho inserito le nuove righe in questo modo:

#include <zlib.h>

gzFile *fili;
char nomef[132];
...
..
..
..
fili=gzopen(nomef,"r");

e' corretta come sintassi oppure c'e' qualche cosa che non va?

oregon
23-07-2012, 19:02
Sembra di s ... ma hai errori? Se li hai, dicceli ...

71lucky
23-07-2012, 20:09
mi da il classico "Segmentation fault"..

Solo che non capisco!!
Ho cambiato solo quelle righe che ho scritto sopra!!

Il medesimo programma con le istruzioni per leggere un file NON zippato funziona, la copia invece dove ho sostituito quelle righe mi da quel errore..

C'e' qualche cosa che mi sfugge nei comandi della libreria zlib.h

:dh: :dh: :dh:

71lucky
23-07-2012, 20:16
Per essere piu' chiaro, ho sostituito:

FILE *fili;

con

gzFile *fili;

e poi


fili=fopen(nomef,"r");

con

fili=gzopen(nomef,"r");

71lucky
23-07-2012, 20:29
Ho trovato l'errore...... :-)!!!!

Ora pero' ho un problema su questa parte..

strcpy(nomef,argv[1]);
fili=gzopen("nomef","r");
if(fili<=0){
printf("-E- This file can't be opened!\n");
exit(1);
}

Se provo ad eseguire il programma su un file.gz mi restituisce l'errore che il file non puo' essere aperto!!!!

Come lavora la funzione gzopen?????

oregon
24-07-2012, 01:36
nomef non "nomef"

71lucky
24-07-2012, 14:55
Ciao Oregon,

se metto nomef al posto di "nomef" mi da l'errore di "Segmentation fault"..

Dov'e' l'inghippo??

Come funziona gzopen rispetto a fopen??

Loading