Histoire de fichier zip

Résolu
florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 - 12 juin 2007 à 21:17
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 - 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

11 réponses

Utilisateur anonyme
13 juin 2007 à 20:53
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.

@+
3
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
15 juin 2007 à 05:52
3
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
12 juin 2007 à 23:56
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.
0
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
13 juin 2007 à 04:42
???

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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 3
13 juin 2007 à 10:48
@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...)
0
florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 3
13 juin 2007 à 19:30
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++
0
florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 3
13 juin 2007 à 21:40
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.

++
0
florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 3
15 juin 2007 à 09:34
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 !
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
15 juin 2007 à 17:52
jette un oeil aussi à ZIPFORGE
très simple d'utilisation

cantador
0
florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 3
15 juin 2007 à 18:34
Oui mais il n'y a pas les sources et c'est un vrai bulldozeur à installer...
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
16 juin 2007 à 15:42
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
0
Rejoignez-nous