IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

[Qt] Probleme zlib


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Août 2009
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 39
    Par défaut [Qt] Probleme zlib
    Bonjour!
    J'ai un soucis d'utilisation avec la zlib. Je tourne sur google depuis un certain temps mais plus ca va et moins mon programme marche
    Je possède un zip contenant des milliers de fichiers et documents et j'aimerai lui ajouter des fichiers dans des documents précis, si possible sans avoir a tout dezipper/rezipper a chaque fois que j'en ajoute.
    Apres quelques recherches et une aide J'ai fini par opter pour la zlib et plus précisément la minizip qui, si j'ai bien compris, contient le genre de fonction dont j'ai besoin.
    J'ai trouve sur le web un post expliquant qu'une fonction faisait ce que j'attendais dans minizip/minizip.c.
    J'ai donc inclus dans mon programme ce fichier (je travaille sous Qt, Windows 7) mais il possède déjà un main. Du coup j'ai fini par trouver des fichiers nommes:
    - unzip.h/unzip.c, zip.h/zip.c.

    j'ai donc ajoute ces fichiers a mon programme mais j'obtiens des milliers d'erreurs (comme pour l'ajout de minizip.c). Et quoique je fasse ces erreurs persistent.
    La plupart des erreurs sont:
    undefined reference to `call_zseek64' sur beaucoup de fonction nommes
    ZSEEK64(*pzlib_filefunc_def,filestream,0,ZLIB_FILEFUNC_SEEK_END)
    Mais le probleme, c'est que quand j'ajoute cette ligne:
    #define ZSEEK64(filefunc,filestream,pos,mode) ((*((filefunc).zseek64_file)) ((filefunc).opaque,filestream,pos,mode))
    que j'ai trouve sur http://www.sfr-fresh.com/unix/misc/z...inizip/ioapi.h j'obtiens cette nouvelle erreur:
    redefinition of ZSEEK64.

    En fait, je suis carrément perdu dans cette libraire de et je ne comprend ni comment l'utiliser ni comment elle marche malgré les différents tuto que j'ai pu voir sur le net.
    Un grand Merci pour le cas ou vous pourriez m'éclairer la dessus!





    Edit:
    J'ai fouille un peu la dessus aussi:
    http://www.gzip.org/zlib/manual.html#gzopen
    Mais je n'arrive pas a ouvrir un zip ni a lire ce qu'il contient.
    Voila le code que j'ai produit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    #include "zlib.h"
    [...]
    void        test::test()
    {
        gzFile  gzfh = NULL;
        char    buffer[1024];
     
        if ((gzfh = gzopen("../zip/test.zip", "rb")) == NULL)
            exit(-3);
        if (gzread(gzfh, buffer, 1024) == -1)
            exit(-4);
        this->test = new QPushButton(buffer);
        this->test->show();
        gzclose(gzfh);
    }
    Mon fichier test.zip contient:

    et l'affichage qui s'ensuit:

  2. #2
    Membre expérimenté Avatar de vikki
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    292
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2007
    Messages : 292
    Par défaut
    Hello,
    J'utilise également minizip dans mon projet, mais je n'ai pas souvenir de problèmes particuliers pour le build (avec visual studio 2005). Je l'utilise de cette manière pour dezipper un fichier unique:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    #include "unzip.h"
     
     
    int UnZip(const std::string & nomFichierIn, const std::string & nomFichierOut)
    {
     
     
    		if( ! Zip::IsZip(nomFichierIn) )
    			return -1;
     
    		unzFile file = unzOpen(nomFichierIn.c_str());
    		if( ! file )
    			return -1;
     
    		if( unzGoToFirstFile(file) != UNZ_OK )
    		{
    			unzClose(file);
    			return -1;
    		}
     
    		if( unzOpenCurrentFile(file) != UNZ_OK )
    		{
    			unzClose(file);
    			return -1;
    		}
     
    		std::ofstream out(nomFichierOut.c_str(),std::ios::binary);
     
    		while(true)
    		{
    			unsigned char * buff = new unsigned char[10000000];
    			int len = unzReadCurrentFile(file,buff,10000000);
    			out.write(reinterpret_cast<char*>(buff),len);
    			delete [] buff;
     
    			if(len < 10000000 )
    				break;
    		}
     
    		int res = unzClose(file);
    		if( res < 0 )
    			return -1;
     
    		return 0;
     
    }
     
    bool IsZip(const std::string & fichier)
    {
     
    		char data[2];
    		std::ifstream file(fichier.c_str(), std::ios_base::in | std::ios_base::binary);
    		file.read(&data[0], 2);
     
    		std::string res;
    		res+=data[0];
    		res+=data[1];
     
    		if(res == "PK") return true;
    		else return false;
     
    }

  3. #3
    Membre averti
    Inscrit en
    Août 2009
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 39
    Par défaut
    C:/Documents/ISA/perso.cpp:79: undefined reference to `unzOpen'
    J'ai eu quelques autres erreurs que j'ai réglées mais je vois pas pour celle la :s

  4. #4
    Membre expérimenté Avatar de vikki
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    292
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2007
    Messages : 292
    Par défaut
    La fonction unzOpen est définie dans unzip.h, en tout cas pour la version de minizip que j'utilise.

  5. #5
    Membre averti
    Inscrit en
    Août 2009
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 39
    Par défaut
    J'ai essaye d'include unzip.h et unzip.c et mais je tombe toujours sur le meme probleme o_O

Discussions similaires

  1. Probleme avec zlib
    Par onilink_ dans le forum Bibliothèques
    Réponses: 1
    Dernier message: 03/10/2010, 12h15
  2. problemes de decompression avec zlib (gzip)
    Par muquet dans le forum C
    Réponses: 3
    Dernier message: 25/07/2007, 13h57
  3. Probleme sur les chaines de caractere
    Par scorpiwolf dans le forum C
    Réponses: 8
    Dernier message: 06/05/2002, 19h01
  4. [Kylix] Probleme d'execution de programmes...
    Par yopziggy dans le forum EDI
    Réponses: 19
    Dernier message: 03/05/2002, 14h50
  5. [Kylix] Probleme de nombre flottant!!
    Par yopziggy dans le forum EDI
    Réponses: 5
    Dernier message: 02/05/2002, 10h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo