Lister le contenu d'un fichier zip (sans dll)

Soyez le premier à donner votre avis sur cette source.

Vue 9 385 fois - Téléchargée 784 fois

Description

[Permet de lister le contenu d'un fichier zip grace a une fonction sans dll ou control activeX]

Tout simplement car j'en avais marre d'utiliser des dll lourde a implementer
et toujours encombrante a distribuer et par ce que j'avais besoin de lister le contenu d'un zip de maniere simple et rapide je vous livre une routine
efficace...

Contient egalement une version etendue pour afficher par exemple
la taille du fichier ou son taux de compression !

Source / Exemple :


' O    O    O
'  \__/ \__/
'  /=||=||=\   oouuuunnnnnnnnmmmmmmmmmmmmmm\
' // ||_||               ZIP Browser        \
' \\ /\ #\     oouuuunnnnnnnnmmmmmmmmmmmmmmmm\
' /=(  \  )==>       Coded by EBArtSoft@      \
'//  \O_\/            Copyright(C) 2003        \
'\\  || ||       post http://www.vbfrance.com   \
' \==||=||==/  oouuuunnnnnnnnmmmmmmmmmmmmmmmmmmmm\
' ===========
'==== E.B ====

'------------------------------------------------------------------
' Function ZIPBrowse
'------------------------------------------------------------------
'     Renvoi une collection contenant les
'     fichiers/dossier d'une archive ZIP
'------------------------------------------------------------------

Private Function ZIPBrowse(ByVal vFileName As String) As Collection
    'drapeau indicant si le fichier est bon ou non
    Dim Found     As Boolean
    'var conteantn le nombre de fichier dans le zip
    Dim FileNum   As Integer
    'var con,tenant les nom de fichier
    Dim Name      As String
    'var temporaire multiusage
    Dim Temp      As Long
    'var d'index
    Dim i         As Long
    'var d'index
    Dim j         As Long
    'var contenant le n° de fichier libre
    Dim f         As Long
    'recupere un n° de fichier libre
    f = FreeFile
    'test l'ouverture du fichier
    Open vFileName For Input As #f: Close #f
    'ouvre le fichier
    Open vFileName For Binary Access Read Lock Write As #f
    'recupere la signature du fichier
    Get #f, , Temp
    'si la signature est un zip (PK)
    If Temp = &H4034B50 Then
        'parcour le dossier
        For i = LOF(1) - 20 To 1 Step -1
            'recupere un mot long
            Get #f, i, Temp
            'si la signature correspond
            If Temp = &H6054B50 Then
                'recupere le nombre de fichier
                Get #f, i + 10, FileNum
                'definis le drapeau
                Found = True
                'quitte la boucle
                Exit For
            End If
        Next
    End If
    'si le fichier est bon !
    If Found Then
        'crée une nouvelle collection
        Set ZIPBrowse = New Collection
        'parcour tout les fichiers
        For j = 1 To FileNum
            'initialise le pointer
            i = i - 36
            'parcour le dossier
            For i = i To 1 Step -1
                'recupere un mot long
                Get #f, i, Temp
                'si la signature correspond
                If Temp = &H2014B50 Then
                    'recupere la longueur du nom de fichier
                    Get #f, i + 28, Temp
                    'crée un buffer
                    Name = Space(Temp)
                    'recupere le nom de fichier
                    Get #f, i + 46, Name
                    'ajoute dans la collection
                    ZIPBrowse.Add Name
                    'quitte la boucle
                    Exit For
                End If
            Next
        Next
    End If
    'ferme le fichier
    Close #f
End Function

Conclusion :


J'accepte volontier toute optimisation de taille ou de rapidité

Mise à jour :

- 23 Oct 2003 :
Extraction Niveau 0
Some bug fix

b@nne prog

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

rem007
Messages postés
1
Date d'inscription
jeudi 4 novembre 2004
Statut
Membre
Dernière intervention
8 novembre 2004

EBArtSoft,

Merci pour le code, vraiment très utile. Cependant un petit problème (un bug) dans le module ZIPBroswe:
- tu utilises un Integer pour FileNum, mais si un fichier ZIP contient plus de 2^8 (32milles et quleques) fichiers la variable FileNum devient négative!
- Solution (du moins je pense):
DIM lFileNum As Long
lFileNum = FileNum
if lFileNum<0 Then lFileNum=65536+lFileNUm
et utilise lFileNUm pour la boucle...
(cette solution marche pour moi !)

Pour finir une question: les nouveaux WinZIP 9 & PKZIP peuvent utiliser un Long pour FileNum (nombre de fichier dépassant 65536 dans une archive). Quelle est le moyen de savoir si le ZIP utilise un Long ou un Integer ? Y-a-t'il un drapeau quelque part ?

Merci encore pour partager ton code avec nous !
cs_magic
Messages postés
11
Date d'inscription
mardi 9 avril 2002
Statut
Membre
Dernière intervention
4 juin 2008

Code très utile en effet. Par contre, je cherche quelque chose de similaire pour des archives tar.gz

Quelqu'un a-t-il une piste ?
cs_EBArtSoft
Messages postés
4531
Date d'inscription
dimanche 29 septembre 2002
Statut
Modérateur
Dernière intervention
22 avril 2019
8
urgo> HEY faut pas deconner non plus, j'ai passé 2 semaines sur le menu... :-P lol
Bricomix> Je pense que tu risque d'attendre un moment ! car je travail sur les fichiers source de zlib et pour moi le C c'est une langue etrangere (comme dans stargate ya des signes bizzar) loool
Carlvb> tu me fera toujours marrer toi ... lol si tu veus je t'envoi une carte de membre et un pin's de l'assoc. hey hey :-P non ça fait vraiment plaisir (faut que je fasse gaffe j'ai la tete qui gonfle a vue d'oeil)

Mercury> en effet j'ai vue ce vilain lamer, il y en a de partout et c'est irremediable. cela dit on aura toujours une longueur d'avance sur ces conn@rd et la satisfaction de l'avoir fait soit meme. De plus j'aime partager nos creations et c'est malheureusement pour cela que je ne les post pas toutes bref .... QUI A UN BON SNIFFER que je le sp@m a mort ! loool ;-)

'tin je suis en forme aujourd'huit ! looool
Grand merci a tous...

Pour info (Avancement du projet) :
Les zip comporte plusieurs niveaux de compression de
0 a 8 (ou 0 a 10 selon les soft) actuellement seul les niveaux
0 a 3 sont completé le niveau 8 etant le plus utilisé notement
dans windows XP... les sources seront disponible je ne sait pas
quand compte tenu des fait >-(, les personnes vraiment
interressées par cette maigre contribution seront me contater ;-)

@+
cs_Mercury
Messages postés
329
Date d'inscription
jeudi 3 janvier 2002
Statut
Membre
Dernière intervention
7 octobre 2005

Y a un petit rigolo qui s'est approprié ton code, et qui l'a mit sous son nom sur Planet-Source-Code : http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=49257&lngWId=1
carlvb
Messages postés
199
Date d'inscription
mercredi 23 avril 2003
Statut
Contributeur
Dernière intervention
25 mai 2017
3
La sortie d'un code du laboratoire EBartSoft est toujours un événement en soi et je trouve ce n'est que justice si c'est une de tes sources qui a obtenu la première trophée admin du site.
J'imagine le tas de bouts de codes qui grouillent dans ta tête et dans ton PC et qui attendent leurs heures de gloire.
Continues à nous épater.

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.