Decompresser fichier rar avec unrar.dll - b3

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

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.