Decompresser fichier rar avec unrar.dll - b3

Soyez le premier à donner votre avis sur cette source.

Vue 156 220 fois - Téléchargée 15 103 fois

Description

Simplement l'utilisation avec VB de la dll de décompression officiel des fichiers compressés RAR, dans une appli basique, que je développerai doucement ;) - voir l'historique après le code -

Cette dll est libre d'utilisation est si j'en crois la license, rien ne m'interdit de la poster ici (avec la source VB qui s'en sert, bien sûr)

La dll de compression au format RAR, quant à elle, est sujette à license payante, donc pas de postage ici!

Par rapport à l'autre source sur vbfrance, celle-ci inclus la nouvelle dll (qui fait 150Ko au lieu de 50Ko), et propose divers fonctions standard.

Source / Exemple :


'Voir zip pour démo d'utilisation (inclus la dll) - 95Ko

'voici les déclarations nécessaire pour utiliser la dll :
'(source : basé sur l'exemple vb fourni avec la dll)

'Erreurs :
Const ERAR_END_ARCHIVE = 10
Const ERAR_NO_MEMORY = 11   'Pas asser de mémoire
Const ERAR_BAD_DATA = 12    'CRC error, header corrompu
Const ERAR_BAD_ARCHIVE = 13     'Mauvais volume
Const ERAR_UNKNOWN_FORMAT = 14  'Mauvais format RAR
Const ERAR_EOPEN = 15      'Erreur à l'ouverture
Const ERAR_ECREATE = 16    'Erreur à la création
Const ERAR_ECLOSE = 17     'Erreur à la fermeture
Const ERAR_EREAD = 18      'Erreur à la lecture
Const ERAR_EWRITE = 19     'Erreur à l'écriture
Const ERAR_SMALL_BUF = 20

'Ouverture :
Const RAR_OM_LIST = 0    'mode listage
Const RAR_OM_EXTRACT = 1 'mode extraction

'Action sur un fichier dans l'archive :
Const RAR_SKIP = 0     'ignorer le fichier
Const RAR_TEST = 1     'tester l'integrité (crc)
Const RAR_EXTRACT = 2  'extraire
 
Const RAR_VOL_ASK = 0
Const RAR_VOL_NOTIFY = 1

'Type pour le listage
Private Type RARHeaderData
    ArcName As String * 260
    FileName As String * 260
    flags As Long
    PackSize As Long
    UnpSize As Long
    HostOS As Long
    FileCRC As Long
    FileTime As Long
    UnpVer As Long
    Method As Long
    FileAttr As Long
    CmtBuf As String
    CmtBufSize As Long
    CmtSize As Long
    CmtState As Long
End Type

'Type pour l'ouverture de l'archive
Private Type RAROpenArchiveData
    ArcName As String
    OpenMode As Long
    OpenResult As Long
    CmtBuf As String
    CmtBufSize As Long
    CmtSize As Long
    CmtState As Long
End Type

'Fonctions dans la dll :
Private Declare Function RAROpenArchive Lib "unrar.dll" (ByRef ArchiveData As RAROpenArchiveData) As Long
Private Declare Function RARCloseArchive Lib "unrar.dll" (ByVal hArcData As Long) As Long
Private Declare Function RARReadHeader Lib "unrar.dll" (ByVal hArcData As Long, ByRef HeaderData As RARHeaderData) As Long
Private Declare Function RARProcessFile Lib "unrar.dll" (ByVal hArcData As Long, ByVal Operation As Long, ByVal DestPath As String, ByVal DestName As String) As Long
Private Declare Sub RARSetChangeVolProc Lib "unrar.dll" (ByVal hArcData As Long, ByVal Mode As Long)
Private Declare Sub RARSetPassword Lib "unrar.dll" (ByVal hArcData As Long, ByVal Password As String)

'Il y a aussi des fonctions de callback, mais compte-tenu des problèmes dû à leur utilisation, je ne les cites pas ici.

Conclusion :


Vous pouvez reprendre les modules pour implémenter/supporter l'extraction de fichier .RAR dans vos projets.
Le projet ici est surtout une démo!

beta version : pas de gestion d'erreurs, pas de gestion des archives protégés par mot de passe (patience, ca va venir)
beta 2 : ajout d'un menu popup lorsque on clique-droit sur un des fichiers contenu dans l'archive. utiliser des archive avec mot de passe crash le prog...
beta 3 : gestion de la progression lors de l'ouverture et de l'extraction. purge mémoire lors de la fermeture du prog. Le menu popup à la fonction "visualiser" qui extrait le fichier dans le dossier temp de windows.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
1
Date d'inscription
lundi 8 janvier 2007
Statut
Membre
Dernière intervention
25 décembre 2008

le code marche parfaitement, mais pour extraire des fichiers rar protégé par mot de passe comment dois-je faire.
merci d'avance
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
62
tentes ta chance en C/C++ parce que VB et le Multithreading :/
Messages postés
8
Date d'inscription
mercredi 25 juillet 2007
Statut
Membre
Dernière intervention
21 mars 2008

Cela est d'autant plus gênant s'il doit y avoir une petite musique .mod et éventuellement un anim en fond d'appli ! :)
Messages postés
8
Date d'inscription
mercredi 25 juillet 2007
Statut
Membre
Dernière intervention
21 mars 2008

Bon tout marche très bien, je commence a faire des trucs utiles avec, mais le souci, c'est que dans le cadre d'une extraction multiarchives assez importante (j'ai testé sur un fichier de 700 mo divisé en 8 archives), le système freeze et le programme semble planter.

N'y a t il pas moyen que l'extraction se fasse tout en conservant une certaine fluidité ?

L'instruction DoEvents ne change rien.

Merci d'avance !
Messages postés
8
Date d'inscription
mercredi 25 juillet 2007
Statut
Membre
Dernière intervention
21 mars 2008

Bon j'ai réussi à débrouiller l'affaire, j'avais pas compilé TKUnrar.dll, donc forcément, ça marchait beaucoup moins bien.

Le programme marche parfaitement, maintenant, reste plus qu'à faire un truc sympa :)

Encore merci Renfield, et je reviens si j'ai un souci :)
Afficher les 39 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.