Histoire de fichier zip [Résolu]

Messages postés
1105
Date d'inscription
dimanche 1 août 2004
Dernière intervention
17 août 2008
- 12 juin 2007 à 21:17 - Dernière réponse :
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Dernière intervention
27 mars 2018
- 16 juin 2007 à 15:42
Salut à tous !

Après les exams, un peu de coding ne fait pas de mal, non ?
Bon.

Alors, parlons de fichiers zip. Imaginez que vous avez une belle archive zipée contenant des fichiers et des répertoires (qui contiennent évidemment des fichiers).
Je souhaite pouvoir obtenir la liste de ces fichiers puis pouvoir en décompresser un qui m'intéresse. Je fais ensuite mon chmilblic dessus et le le rezippe en remplaçant l'orignal.

Ca parait drôlement simple. Et bien, j'ai beau chercher, je ne trouve pas comment obtenir la liste des fichiers d'un zip et encore moins ceux contenus dans les sous sous répertoires !

Je suis allé voir wotsit.com pour aller en chasse d'infos sur ce format mais c'est assez dense et complexe comme système. Je me dis qu'il y a surement une façon "simple" (je mets des guillemets) pour y parvenir.

Et c'est là que j'aimerais que vous interveniez, vous, âmes éclairées. Y'a t-il une librairie à préférer, un truc tout fait (car ce qui est fait, ...) ? J'ai la ZLib. f0xi n'a pas l'air de l'apprécier tellement...

Merci d'avance,
Flo
Afficher la suite 

Votre réponse

11 réponses

Meilleure réponse
13 juin 2007 à 20:53
3
Merci
Salut Flo,

Et ca dis quoi avec les composants TurboPower Abbrevia ? Ces composants sont OpenSource, il me semble : donc ca devrait répondre à tes intéroggations.

@+

Merci Utilisateur anonyme 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 92 internautes ce mois-ci

Commenter la réponse de Utilisateur anonyme
Meilleure réponse
Messages postés
4304
Date d'inscription
samedi 16 octobre 2004
Dernière intervention
9 mars 2018
15 juin 2007 à 05:52
3
Merci

Merci f0xi 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 92 internautes ce mois-ci

Commenter la réponse de f0xi
Messages postés
2684
Date d'inscription
jeudi 15 janvier 2004
Dernière intervention
26 juillet 2018
12 juin 2007 à 23:56
0
Merci
Salut,
(Et c'était bien, les exams? :)))
Ce que tu veux faire doit être possible puisque WinZip 8.1 y arrive.
Mais, sur wotsit.com, tu n'as que WinZip 6.3 de commenté...

De toute façon, je ne comprends pas bien ton problème car tu seras bien obligé de tout décompresser si tu veux re-compresser après changement, non?

Une âme en peine, obscure et vile.
Commenter la réponse de Caribensila
Messages postés
4304
Date d'inscription
samedi 16 octobre 2004
Dernière intervention
9 mars 2018
13 juin 2007 à 04:42
0
Merci
???

mais mais ... j'aime la ZLib!
bon basiquement, pour les fichier Zip il faudrat un peu plus que la ZLib ...
mais elle est niquouelle cette api, je l'utilise quand je veux un format de fichier qui tiens pas de place (voir ma source HROT etc).

J'ai du la critiquer une fois, parce que j'avais du recuperer un vieux header pourris et mal foutus. mais maintenant avec la ZLibEx, je suis tranquillou, ça fonctionne nickel.

sinon, tu as des compo existant (DelphiZip par exemple) payant, free, plus ou moins bien foutus, plus ou moins bien compatible.
Sinon tu peu toujours essayer de trouver le Header du support Zip dans le sdk de XP. doit bien y'avoir cela quelque part.

http://www.example-code.com/delphi/zip.asp

http://www.example-code.com/delphi/delphi-list-zip.asp

http://www.delphizip.org/
http://www.delphipages.com/skunkworks/swcompress.html
Commenter la réponse de f0xi
Messages postés
1105
Date d'inscription
dimanche 1 août 2004
Dernière intervention
17 août 2008
13 juin 2007 à 10:48
0
Merci
@Cari:
et justement non ! Avec 7-zip, je peux décompresser un seul fichier puis le modifier et enfin le remplacer sans tout devoir recompresser. C'est drôlement utile ce truc quand ton archive est assez grosse (genre 20 Mo) car pour décompresser ça va vite, mais dans l'autre sens.... pffffouuuu qu'est ce que ça rame !

@f0xi: tant mieux si tu l'aimes bien cette API. En effet, une fois on parlait de png, et tu avais critiqué ses headers pourris.

Je regardes tes exemples, mais apparemment ça utilise plein de compos exotiques. Et j'aime pas les compos exotiques. Je ne télécharge que les librairies *fiables* (ex: JVCL, Indy, ZLib^^, GraphicEx) mais pas ces p'tits compos qui la plupart du temps comportent des bugs que seul le type qui l'a écrit est capable de trouver la source...

Je vous avertirai lorsque j'aurais avancé dans mes recherches (ça sent la source à plein nez...)
Commenter la réponse de florenth
Messages postés
1105
Date d'inscription
dimanche 1 août 2004
Dernière intervention
17 août 2008
13 juin 2007 à 19:30
0
Merci
Alors, quelques heures de recherches et d'expérimentation plus tard: je corrige le propose de f0xi. "pour les fichier Zip il faudrat <strike>un peu</strike> beaucoup plus que la ZLib"

Car en fait c'est drôlement compliqué ! Et pour couronner le tout, les tailles de fichiers peuvent être soit en Cardinal soit en Int64 suivant un flag bien défini qui varie selon les fichiers !!!! Pas simple tout ça...

J'ai encore du mal à lister les fichiers du .zip: j'arrive pas à savoir comment passer d'n fichier à l'autre.

La doc dit cela mais j'y comprend rien:
  Files stored in arbitrary order.  Large .ZIP files can span multiple
  volumes or be split into user-defined segment sizes. All values
  are stored in little-endian byte order unless otherwise specified.

  Overall .ZIP file format:

    [local file header 1]
    [file data 1]
    [data descriptor 1]
    .
    .
    .
    [local file header n]
    [file data n]
    [data descriptor n]
    [archive decryption header]
    [archive extra data record]
    [central directory]
    [zip64 end of central directory record]
    [zip64 end of central directory locator]
    [end of central directory record]

  A.  Local file header:

        local file header signature     4 bytes  (0x04034b50)
        version needed to extract       2 bytes
        general purpose bit flag        2 bytes
        compression method              2 bytes
        last mod file time              2 bytes
        last mod file date              2 bytes
        crc-32                          4 bytes
        compressed size                 4 bytes
        uncompressed size               4 bytes
        file name length                2 bytes
        extra field length              2 bytes

        file name (variable size)
        extra field (variable size)

  B.  File data

      Immediately following the local header for a file
      is the compressed or stored data for the file.
      The series of [local file header][file data][data
      descriptor] repeats for each file in the .ZIP archive.

  C.  Data descriptor:

        crc-32                          4 bytes
        compressed size                 4 bytes
        uncompressed size               4 bytes

      This descriptor exists only if bit 3 of the general
      purpose bit flag is set (see below).  It is byte aligned
      and immediately follows the last byte of compressed data.
      This descriptor is used only when it was not possible to
      seek in the output .ZIP file, e.g., when the output .ZIP file
      was standard output or a non-seekable device.  For ZIP64(tm) format
      archives, the compressed and uncompressed sizes are 8 bytes each.

      When compressing files, compressed and uncompressed sizes
      should be stored in ZIP64 format (as 8 byte values) when a
      files size exceeds 0xFFFFFFFF.   However ZIP64 format may be
      used regardless of the size of a file.  When extracting, if
      the zip64 extended information extra field is present for
      the file the compressed and uncompressed sizes will be 8
      byte values.  

      Although not originally assigned a signature, the value
      0x08074b50 has commonly been adopted as a signature value
      for the data descriptor record.  Implementers should be
      aware that ZIP files may be encountered with or without this
      signature marking data descriptors and should account for
      either case when reading ZIP files to ensure compatibility.
      When writing ZIP files, it is recommended to include the
      signature value marking the data descriptor record.  When
      the signature is used, the fields currently defined for
      the data descriptor record will immediately follow the
      signature.
lol

A++
Commenter la réponse de florenth
Messages postés
1105
Date d'inscription
dimanche 1 août 2004
Dernière intervention
17 août 2008
13 juin 2007 à 21:40
0
Merci
Ah oui, j'avais occulté cette piste. Je vais voir ce que cela donne même si ces composants sont plutôt vieux (2003) et les fichiers que je veux ouvrir récents...

Je t'en dirais des nouvelles.

++
Commenter la réponse de florenth
Messages postés
1105
Date d'inscription
dimanche 1 août 2004
Dernière intervention
17 août 2008
15 juin 2007 à 09:34
0
Merci
Super ça marche !
Ces liens f0xi je les avais déjà visités mais vu la description donnée sur le site, j'avais pas compris le rôle de cette librairie.

@Francky: les compos Turbo fonctionnent aussi. c'est pas des plus simples à utiliser je trouve mais ça fera l'affaire.

Merci à vous !
Commenter la réponse de florenth
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Dernière intervention
27 mars 2018
15 juin 2007 à 17:52
0
Merci
jette un oeil aussi à ZIPFORGE
très simple d'utilisation

cantador
Commenter la réponse de cs_cantador
Messages postés
1105
Date d'inscription
dimanche 1 août 2004
Dernière intervention
17 août 2008
15 juin 2007 à 18:34
0
Merci
Oui mais il n'y a pas les sources et c'est un vrai bulldozeur à installer...
Commenter la réponse de florenth
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Dernière intervention
27 mars 2018
16 juin 2007 à 15:42
0
Merci
non, je ne pense pas..
il y a deux dpk à installer :

dclZipForged7.dpk et
vclZipForged7.dpk

la version free est sans source
la version avec source vaut 99?

cantador
Commenter la réponse de cs_cantador

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.