Histoire de fichier zip [Résolu]

florenth 1105 Messages postés dimanche 1 août 2004Date d'inscription 17 août 2008 Dernière intervention - 12 juin 2007 à 21:17 - Dernière réponse : cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention
- 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 

11 réponses

Répondre au sujet
Utilisateur anonyme - 13 juin 2007 à 20:53
+3
Utile
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.

@+
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Utilisateur anonyme
f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention - 15 juin 2007 à 05:52
+3
Utile
regarde quand meme ici :

http://www.delphizip.org/

et ça :

http://www.delphizip.org/179/zmstr1790710.zip
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de f0xi
Caribensila 2671 Messages postés jeudi 15 janvier 2004Date d'inscription 18 janvier 2018 Dernière intervention - 12 juin 2007 à 23:56
0
Utile
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
f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention - 13 juin 2007 à 04:42
0
Utile
???

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
florenth 1105 Messages postés dimanche 1 août 2004Date d'inscription 17 août 2008 Dernière intervention - 13 juin 2007 à 10:48
0
Utile
@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
florenth 1105 Messages postés dimanche 1 août 2004Date d'inscription 17 août 2008 Dernière intervention - 13 juin 2007 à 19:30
0
Utile
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
florenth 1105 Messages postés dimanche 1 août 2004Date d'inscription 17 août 2008 Dernière intervention - 13 juin 2007 à 21:40
0
Utile
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
florenth 1105 Messages postés dimanche 1 août 2004Date d'inscription 17 août 2008 Dernière intervention - 15 juin 2007 à 09:34
0
Utile
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
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 15 juin 2007 à 17:52
0
Utile
jette un oeil aussi à ZIPFORGE
très simple d'utilisation

cantador
Commenter la réponse de cs_cantador
florenth 1105 Messages postés dimanche 1 août 2004Date d'inscription 17 août 2008 Dernière intervention - 15 juin 2007 à 18:34
0
Utile
Oui mais il n'y a pas les sources et c'est un vrai bulldozeur à installer...
Commenter la réponse de florenth
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 16 juin 2007 à 15:42
0
Utile
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.