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

Qt Discussion :

7zip/lzma avec Qt


Sujet :

Qt

  1. #1
    Membre éclairé
    Avatar de alpha_one_x86
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2006
    Messages : 411
    Par défaut 7zip/lzma avec Qt
    Bonjour,
    Voila, j'essaye d'adapter lzma SDK/7zip, http://files.first-world.info/temp/7zip.zip et dés que je met #include <QObject> dans 7zMain.c j'ai prés de 600 erreurs, quelqu'un serai me dire pourquoi?
    Merci.

  2. #2
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2008
    Messages
    26 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2008
    Messages : 26 772
    Par défaut
    Salut,

    7zMain.c => C
    Qt => C++

    Qt utilise des concepts que le C ne connaît que de très loin (les classes en sont le meilleur et le plus simple exemple). QObject commence en définissant une classe, ça tombe mal.

    Ensuite, il faut que ton fichier passe bien par le moc. Or, avec son extension, il y a très peu de chances qu'un outil automatique puisse le comprendre.

    Finalement, la manière. Très personnellement, dans ce genre de cas, je préfère dériver de QIODevice. Au lieu d'aller magouiller je-ne-sais-quoi dans un fichier du SDK, je crée, dans mon propre fichier, un dérivé de QIODevice, qui appelle les fonctions du SDK au bon moment.
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  3. #3
    Membre éclairé
    Avatar de alpha_one_x86
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2006
    Messages : 411
    Par défaut
    Je pense étre incapable de faire ça, je vais essayer quand même...

  4. #4
    Membre éclairé
    Avatar de alpha_one_x86
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2006
    Messages : 411
    Par défaut
    La version C++ n'as rien à voir avec la version C, c'est soit juste le décompateur lzma, ou tout la gui windows.

  5. #5
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2008
    Messages
    26 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2008
    Messages : 26 772
    Par défaut
    Citation Envoyé par alpha_one_x86 Voir le message
    La version C++ n'as rien à voir avec la version C, c'est soit juste le décompateur lzma, ou tout la gui windows.
    Il existe une lib C, qui ne fait que compression et décompression, c'est celle-là que j'utilise personnellement (rien compris à la version C++). En C++, tu as droit à tout 7Zip, il faut extraire le bon morceau de toute l'archive.
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  6. #6
    Membre éclairé
    Avatar de alpha_one_x86
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2006
    Messages : 411
    Par défaut
    J'ai besoin de pouvoir extraire, vérifié, lire une archive multi-fichiers supportant le lzma, soit 7z par exemple.

  7. #7
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2008
    Messages
    26 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2008
    Messages : 26 772
    Par défaut
    Si tu peux gérer l'archive dès le départ, je dirais de faire d'abord un .tar des fichiers, puis de le passer à LZMA. Pour la décompression, chemin inverse. Pour simplifier la gestion du .tar, un petit coup de QProcess.

    Sinon... Il faudrait aller un peu plus en profondeur dans les formats des archives, et je n'ai pas de clé pour t'aider.

    Si tu y arrives, fais-nous signe (même si c'est une piste pour lire les formats ou un truc du genre).
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  8. #8
    Membre éclairé
    Avatar de alpha_one_x86
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2006
    Messages : 411
    Par défaut
    J'ai la méthodologie pour y arrivé, j'ai fait un code, mais il me retourne le code SZ_ERROR_DATA:
    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
    	QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"));
    	if(fileName!="")
    	{
    		QFile temp(fileName);
    		if(temp.open(QIODevice::ReadOnly))
    		{
    			QByteArray srcFile;
    			srcFile=temp.readAll();
     
    			unsigned char *dest;
    			size_t * dest_length=new size_t;
    			const unsigned char * src = (const unsigned char *) srcFile.constData();
    			SizeT * src_lenght = new SizeT;
    			*src_lenght = srcFile.size();
    			ui->labelSizeSource->setText(QString::number(srcFile.size()));
    			int ret;
    			ret = LzmaUncompress(dest, dest_length, src, src_lenght, src, LZMA_PROPS_SIZE);
     
    			if(ret == SZ_OK)
    			{
    				ui->labelSizeDest->setText(QString::number(*dest_length));
    				//return SZ_OK;
    			}
    			else
    			{
    				ui->label_2->setText("error: ");
    				ui->labelSizeDest->setText(QString::number(ret));
    				//return ret;
    			}
    			temp.close();
    		}
    	}
    J'ai du mal à comprendre les 2 derniers éléments de la fonction LzmaUncompress() qui ne sont pas documenté bien sur....

  9. #9
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2008
    Messages
    26 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2008
    Messages : 26 772
    Par défaut
    Citation Envoyé par alpha_one_x86 Voir le message
    J'ai du mal à comprendre les 2 derniers éléments de la fonction LzmaUncompress() qui ne sont pas documenté bien sur....
    Normalement, il ne sert à rien de les comprendre. Prends leurs valeurs par défaut indiquées dans la doc, ça ira parfaitement, normalement. Concernant l'avant-dernier paramètre, j'avais lu, je ne sais plus où, qu'il fallait mettre src+1, et non src.

    Sinon, il me semble que le problème est plus LZMA-related, et non plus Qt-.
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  10. #10
    Membre éclairé
    Avatar de alpha_one_x86
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2006
    Messages : 411
    Par défaut
    Voila un code qui ne crash pas sous gcc, c'est déjà un début:
    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
    			QByteArray data=temp.readAll();
    			unsigned char dest[1024*1024];
    			size_t dest_length = 1024*1024;
    			const unsigned char * src = (const unsigned char *) data.constData();
    			SizeT src_lenght = data.size();
    			int ret=999999;
    			int a = 0;
    			while(a <15 && ret != SZ_OK)
    			{
    				ret = LzmaUncompress(dest, &dest_length, src, &src_lenght, src + a, LZMA_PROPS_SIZE);
    				a++;
    			}
    			if(ret == SZ_OK)
    			{
    				data = (const char *) dest;
    				ui->label_2->setText("Ok: ");
    				//return SZ_OK;
    			}
    			else
    			{
    				ui->label_2->setText("Error");
    				//return ret;
    			}
    Hors LzmaUncompress(); retourne toujours 1 et je ne comprends pas ce que doit contenir le 5eme paramétre.
    Tester avec un vrai fichier lzma ayant cette entéte:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    5d00000002006205000000000000218bbc1ba78c3406ac7a7a8

Discussions similaires

  1. [Système] Exécuter 7zip avec PHP
    Par boriskov dans le forum Langage
    Réponses: 3
    Dernier message: 24/02/2015, 10h39
  2. [Batch] Création d'archive unique avec 7zip (newbie style)
    Par jejeapollo dans le forum Scripts/Batch
    Réponses: 0
    Dernier message: 24/11/2010, 10h53
  3. Lecture de fichiers LZMA avec QIODevice
    Par dourouc05 dans le forum Téléchargez
    Réponses: 0
    Dernier message: 14/10/2010, 21h07
  4. Dezipez avec 7zip
    Par tlemcen33 dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 18/12/2009, 17h27
  5. Creer une archive avec 7zip en C
    Par hka75 dans le forum C
    Réponses: 2
    Dernier message: 04/08/2007, 20h37

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